Ricerca in Lakebase

Lakebase Search aggiunge la ricerca ibrida vettoriale e per parole chiave ai progetti Lakebase. Abilitalo nelle impostazioni del progetto, poi installa le estensioni di cui hai bisogno: lakebase_vector per la ricerca vettoriale, lakebase_text per la ricerca per parole chiave BM25 e, opzionalmente lakebase_tokenizer , per la tokenizzazione configurabile.

Lakebase Search offre due metodi di ricerca complementari. Usare autonomamente o combinarli per la ricerca ibrida:

  • La ricerca vettoriale (semantica) trova righe il cui significato è più vicino alla query, anche quando non condividono parole. Si esegue una query con un incorporamento (un vettore numerico prodotto da un modello) e l'indice restituisce i vettori più vicini per distanza. Usarlo per domande in linguaggio naturale, raccomandazioni e generazione aumentata (RAG). Basato su lakebase_vector.
  • La ricerca per parole chiave (testo completo) classifica le righe in base a quanto corrispondono ai termini esatti della query, utilizzando il punteggio di pertinenza BM25. Usarlo per nomi, codici e ricerche con termini esatti in cui la formulazione è importante. Basato su lakebase_text.
  • La ricerca ibrida esegue entrambe le ricerche e combina i risultati in un elenco classificato, in modo da ottenere corrispondenze semanticamente simili e esatte. Usarlo quando le query combinano finalità con termini specifici, il caso più comune nella ricerca nel mondo reale.

Parola chiave e ricerca vettoriale per la query

Come funziona

Sotto il cofano, Lakebase Search è costruito su tre estensioni di Postgres:

  • lakebase_vector aggiunge la ricerca vettoriale approssimativa del vicino più prossimo (ANN) tramite il tipo di indice lakebase_ann. Si tratta di un drop-in complementare a pgvector: gli stessi tipi di vettore, operatori di distanza e sintassi di query funzionano senza modifiche. Internamente, usa il partizionamento IVF con la quantizzazione RaBitQ, che supporta indici con oltre 1 miliardo di vettori in un singolo indice e consente di costruire l'indice da 50 a 100 volte più velocemente rispetto a HNSW. Gli indici sono supportati dall'archiviazione e sopravvivono alla scalabilità a zero senza riscaldamento.

  • lakebase_text aggiunge la ricerca full-text BM25 tramite il tipo di indice lakebase_bm25. È compatibile con i tipi standard tsvector e gli operatori di query di PostgreSQL. La classificazione BM25 rappresenta simultaneamente la frequenza dei termini, la lunghezza del documento e le statistiche a livello di corpus. Top-K pushdown (Block-Max WAND) recupera dall'indice solo i K risultati più rilevanti, anziché calcolare un punteggio per ogni corrispondenza.

  • lakebase_tokenizer aggiunge la tokenizzazione configurabile dell'intera parola e l'analisi morfologica cinese, giapponese e coreano (CJK) tramite l'interfaccia del dizionario di ricerca testuale di PostgreSQL. Produce valori PostgreSQL standard tsvector che funzionano con gli indici GIN e gli indici lakebase_bm25. Vedi lakebase_tokenizer per le opzioni supportate e la configurazione.

Puoi eseguire ricerche sui dati che provengono dal lakehouse, non solo sui dati scritti direttamente in Postgres. Usa tabelle sincronizzate per sincronizzare una tabella Unity Catalog in Lakebase e mappa le sue colonne ai tipi Postgres pronti per la ricerca durante la sincronizzazione:

Una volta completata la sincronizzazione, crea un indice lakebase_ann o lakebase_bm25 sulla colonna sincronizzata e offri ricerche a bassa latenza alle applicazioni insieme ai tuoi dati operativi. Per la configurazione della mappatura, vedi Mappatura personalizzata dei tipi per Lakebase Search.

Requisiti

  • Postgres 16 o versione successiva
  • L'abilitazione di Lakebase Search in un progetto è irreversibile

Abilita Lakebase Search nelle impostazioni del progetto:

  1. Nel progetto Lakebase fare clic su Impostazioni nel riquadro di spostamento a sinistra.
  2. In Lakebase Search, fai clic su Abilita Lakebase Search.

Avvertimento

Abilitazione di Lakebase Search:

  • Riavvia tutti i calcoli nel progetto, eliminando tutte le connessioni attive
  • Rende disponibili l'installazione di lakebase_vector, lakebase_text, ed lakebase_tokenizer estensioni
  • Non è possibile disattivare una volta abilitato

Installazione di estensioni

Dopo aver abilitato Lakebase Search, installare le estensioni nel database:

-- Required: vector search (CASCADE installs pgvector as a dependency)
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

-- Required: BM25 full-text search
CREATE EXTENSION IF NOT EXISTS lakebase_text;

-- Optional: configurable tokenization
CREATE SCHEMA IF NOT EXISTS tokenizer_ext;
CREATE EXTENSION IF NOT EXISTS lakebase_tokenizer WITH SCHEMA tokenizer_ext;

Inizia subito

L'esempio seguente crea una documents tabella con una colonna vettoriale e una colonna di ricerca full-text, quindi esegue query vettoriali e di parole chiave:

Note

Questi esempi usano vettori letterali piccoli come '[0.1, 0.2, 0.3]' per l'illustrazione. In un'applicazione reale generare incorporamenti esternamente con un modello di incorporamento, quindi archiviare il risultato nella VECTOR colonna. Su Databricks, puoi interrogare un modello di embedding usando Model Serving, ad esempio in ai_query un notebook o Databricks SQL, e poi inserire i vettori risultanti in Lakebase. La VECTOR(n) colonna e l'indice devono usare la stessa dimensione n dell'output del modello (in genere da 384 a 1536).

-- Create a table with a vector column and a tsvector column
CREATE TABLE documents (
  id        SERIAL PRIMARY KEY,
  title     TEXT NOT NULL,
  body      TEXT NOT NULL,
  embedding VECTOR(3),
  body_tsv  TSVECTOR
);

-- Create a vector search index
CREATE INDEX documents_embedding_idx ON documents
  USING lakebase_ann (embedding vector_cosine_ops);

-- Insert sample data and populate the tsvector column
INSERT INTO documents (title, body, embedding, body_tsv) VALUES
  ('Postgres overview', 'Postgres is an open-source relational database.', '[0.1, 0.2, 0.3]', to_tsvector('english', 'Postgres is an open-source relational database.')),
  ('Vector search guide', 'Vector search finds semantically similar results.', '[0.4, 0.5, 0.6]', to_tsvector('english', 'Vector search finds semantically similar results.')),
  ('Full-text search', 'BM25 ranking improves keyword search relevance.', '[0.7, 0.8, 0.9]', to_tsvector('english', 'BM25 ranking improves keyword search relevance.'));

-- Build the BM25 index after inserting data
-- BM25 computes corpus statistics at build time, not incrementally
CREATE INDEX documents_body_bm25 ON documents USING lakebase_bm25 (body_tsv);

-- Vector similarity search
SELECT id, title
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, 0.3]'
LIMIT 5;

-- BM25 keyword search (lower score = more relevant)
SELECT id, title,
  body_tsv <@> to_bm25query(to_tsvector('english', 'database'), 'documents_body_bm25') AS score
FROM documents
ORDER BY score
LIMIT 5;

L'esempio di ricerca ibrida seguente riutilizza la documents tabella e gli indici da Introduzione. Recupera i migliori candidati da ciascuna ricerca in modo indipendente, quindi li combina in un'unica classifica usando Reciprocal Rank Fusion (RRF): i risultati che si posizionano bene in una o in entrambe le ricerche ottengono un punteggio più alto.

WITH vector_ranked AS (
  SELECT id, RANK() OVER (ORDER BY dist) AS rank
  FROM (
    SELECT id, embedding <=> '[0.1, 0.2, 0.3]' AS dist
    FROM documents
    ORDER BY dist
    LIMIT 40
  ) v
),
keyword_ranked AS (
  SELECT id, RANK() OVER (ORDER BY score) AS rank
  FROM (
    SELECT id, body_tsv <@> to_bm25query(to_tsvector('english', 'database'), 'documents_body_bm25') AS score
    FROM documents
    ORDER BY score
    LIMIT 40
  ) k
)
SELECT d.id, d.title,
  COALESCE(1.0 / (60 + v.rank), 0) + COALESCE(1.0 / (60 + k.rank), 0) AS rrf_score
FROM documents d
LEFT JOIN vector_ranked v ON d.id = v.id
LEFT JOIN keyword_ranked k ON d.id = k.id
WHERE v.id IS NOT NULL OR k.id IS NOT NULL
ORDER BY rrf_score DESC, d.id
LIMIT 10;

Ogni CTE recupera i propri primi 40 candidati. RANK() assegna lo stesso rango ai punteggi collegati. La costante 60 attenua l'influenza dei risultati con classificazione bassa e d.id interrompe i legami per l'impaginazione stabile. Ottimizza il parametro LIMIT per elenco e la costante RRF per i tuoi dati. Sono validi anche altri metodi di fusione, ad esempio l'assegnazione di punteggi ponderati.

Estensioni

Extension Scopo Tipo di indice
lakebase_vector Ricerca vettoriale ANN, compatibile con pgvector lakebase_ann
lakebase_text Ricerca full-text BM25, compatibile con FTS lakebase_bm25
lakebase_tokenizer Tokenizzazione configurabile Non applicabile