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.
Importante
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.
L'estensione lakebase_text aggiunge la ricerca full-text BM25 a Lakebase tramite il lakebase_bm25 tipo di indice. È compatibile con gli operatori di query e di tipo standard tsvector di PostgreSQL.
Install
Abilitare prima di tutto Lakebase Search nelle impostazioni del progetto. Installare quindi l'estensione:
CREATE EXTENSION IF NOT EXISTS lakebase_text;
Perché lakebase_text invece della ricerca full-text gin standard
La ricerca full-text predefinita di PostgreSQL usa indici GIN e ts_rank per l'assegnazione dei punteggi per pertinenza.
ts_rank non usa statistiche del corpus globale, quindi i punteggi diminuiscono man mano che aumentano i dati.
lakebase_text migliora in questo modo in due modi:
- La classificazione BM25 rappresenta contemporaneamente la frequenza dei termini, la lunghezza del documento e le statistiche a livello di corpus, producendo punteggi di pertinenza più accurati rispetto a TF-IDF.
- Top-K pushdown usa Block-Max WAND per restituire solo i risultati più rilevanti dell'indice, senza assegnare punteggi a ogni corrispondenza nel set di risultati.
Avvio rapido
Compilare l'indice dopo l'inserimento lakebase_bm25 dei dati. BM25 calcola le statistiche a livello di corpus in fase di compilazione dell'indice, non in modo incrementale, pertanto l'indice deve essere creato in una tabella popolata.
-- Create a table with a generated tsvector column
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
passage TEXT,
vector TSVECTOR GENERATED ALWAYS AS (to_tsvector('english', passage)) STORED
);
-- Insert data before building the BM25 index
INSERT INTO documents (passage) VALUES
('Postgres is a powerful open-source relational database.'),
('Vector search finds semantically similar results.'),
('BM25 ranking improves full-text search relevance scores.');
-- Create the BM25 index on the populated table
CREATE INDEX documents_passage_bm25 ON documents USING lakebase_bm25 (vector);
-- Query: lower score means more relevant
SELECT id, passage,
vector <@> to_bm25query(to_tsvector('english', 'database'), 'documents_passage_bm25') AS score
FROM documents
ORDER BY score
LIMIT 5;
L'operatore <@> restituisce un punteggio BM25 negativo. L'ordinamento in base al punteggio crescente restituisce prima i risultati più rilevanti.
Mantenere l'indice accurato
Le statistiche BM25 vengono calcolate in fase di compilazione dell'indice e aggiornate da VACUUM. Per la maggior parte dei carichi di lavoro, i punteggi regolari VACUUM mantengono accurati i punteggi. Dopo il caricamento bulk di una grande quantità di nuovi dati, eseguire VACUUM manualmente:
VACUUM documents;
Ottimizzare la ricerca
GUC a livello di sessione
| Parametro | Tipo | Default | Descrizione |
|---|---|---|---|
lakebase_bm25.default_limit |
integer | 1000 |
Numero massimo di risultati restituiti dall'indice. |
lakebase_bm25.prefilter |
boolean | false |
Quando true, valuta le WHERE condizioni prima di calcolare i punteggi BM25. Usare quando i filtri eliminano molte righe e sono economici da valutare. |
lakebase_bm25.enable_scan |
boolean | true |
Impostare su per forzare false un'analisi sequenziale, ignorando l'indice. Utile per i test. |
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;
Le guc hanno la precedenza sui parametri di archiviazione degli indici quando vengono impostati entrambi.
Parametri di archiviazione dell'indice
Impostare queste opzioni in fase di creazione dell'indice o con ALTER INDEX:
| Parametro | Tipo | Default | Intervallo | Descrizione |
|---|---|---|---|---|
k1 |
real | 1.2 |
Da 1.2 a 2.0 | Saturazione della frequenza dei termini. I valori più alti danno più peso ai termini ripetuti. |
b |
real | 0.75 |
Da 0.0 a 1.0 | Normalizzazione della lunghezza del documento.
0.0 disabilita la normalizzazione della lunghezza; 1.0 applica la normalizzazione completa. |
default_limit |
integer | 1000 |
Da 1 a 65535 | Limite di fallback quando la GUC della sessione non è impostata. |
prefilter |
boolean | false |
N/A | Impostazione del prefiltro di fallback quando la GUC della sessione non è impostata. |
-- Set parameters at index creation (use a new name — the Quick start already created documents_passage_bm25)
CREATE INDEX documents_passage_bm25_tuned ON documents USING lakebase_bm25 (vector)
WITH (default_limit = 20, k1 = 1.5);
-- Update parameters on an existing index
ALTER INDEX documents_passage_bm25_tuned SET (default_limit = 50);
Informazioni di riferimento sulle API
Tipi
bm25query_tsvector: combina una query tsvector con l'identificatore di indice di destinazione. Usato come operando destro di <@>.
Operatori
| Operatore | Signature | Returns | Descrizione |
|---|---|---|---|
<@> |
tsvector <@> bm25query_tsvector |
double precision |
Restituisce un punteggio BM25 negativo. Ordine crescente per ottenere prima i risultati più rilevanti. |
Functions
| Function | Returns | Descrizione |
|---|---|---|
to_bm25query(query tsvector, index regclass) |
bm25query_tsvector |
Costruisce un oggetto query BM25 da un tsvector oggetto e dall'identificatore dell'oggetto dell'indice. |
Classi di operatore
| Class | Impostazione predefinita per | Descrizione |
|---|---|---|
tsvector_bm25_ops |
tsvector |
Esegue tsvector il mapping delle colonne all'operatore per il <@> punteggio BM25. Questa è la classe di operatore predefinita per tsvector con . lakebase_bm25Non è necessario specificarla in modo esplicito. |