Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
Vettore, parola chiave e ricerca ibrida
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.
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 standardtsvectore 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.
Serve i dati delle case sul lago per la ricerca
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:
- Mappare una colonna di embedding a una
vector(n)colonna per la ricerca vettoriale. - Genera una
tsvectorcolonna dal testo sorgente per la ricerca per parola chiave.
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
Abilitare La ricerca di Lakebase
Dopo aver eseguito l'accesso al progetto, abilitare Lakebase Search nelle impostazioni del progetto:
- Nel progetto Lakebase fare clic su Impostazioni nel riquadro di spostamento a sinistra.
- 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_vectorelakebase_textda 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;
Combinare i risultati con la ricerca ibrida
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 |