Ricerca in Lakebase

Important

Questa funzionalità è in versione beta. Gli amministratori dell'area di lavoro possono controllare l'accesso a questa funzionalità dalla pagina Anteprime . Vedere Gestire le anteprime di Azure Databricks.

Lakebase Search aggiunge la ricerca ibrida di vettori e parole chiave ai progetti di scalabilità automatica di Lakebase. Abilitalo una volta nelle impostazioni del progetto, quindi installa le estensioni Postgres lakebase_vector e lakebase_text per iniziare a creare funzionalità di ricerca.

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

Dietro le quinte, Lakebase Search è basato su due estensioni 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.

Puoi servire la ricerca sui dati che provengono dalla casa sul lago, non solo sui dati scritti direttamente a 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:

Dopo che la sincronizzazione è completata, costruisci un lakebase_ann indice o lakebase_bm25 sulla colonna sincronizzata e serve una ricerca a bassa latenza alle tue applicazioni insieme ai dati operativi. Per la configurazione della mappatura, vedi Mappatura personalizzata dei tipi per Lakebase Search.

Requisiti

  • Postgres 16 o versione successiva
  • Accesso beta per il progetto. Lakebase Search è in versione beta; contattare il rappresentante dell'account Databricks per richiederlo.
  • L'abilitazione di Lakebase Search in un progetto è irreversibile

Dopo aver eseguito l'accesso al progetto, abilitare 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 le estensioni lakebase_vector e lakebase_text da installare
  • 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;

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. In Databricks è possibile eseguire query su un modello di incorporamento usando Model Serving, ad esempio con ai_query in un notebook o Databricks SQL, e quindi 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 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