lakebase_text

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;

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;

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.

Passaggi successivi