lakebase_text

Belangrijk

Deze functie bevindt zich in de bètaversie. Werkruimtebeheerders kunnen de toegang tot deze functie beheren vanaf de pagina Previews . Zie Azure Databricks previews beheren.

De lakebase_text extensie voegt BM25 zoeken in volledige tekst toe aan Lakebase via het lakebase_bm25 indextype. Het is compatibel met het standaardtype tsvector en queryoperators van PostgreSQL.

Install

Schakel eerst Lakebase Search in uw projectinstellingen in. Installeer vervolgens de extensie:

CREATE EXTENSION IF NOT EXISTS lakebase_text;

De ingebouwde zoekfunctie voor volledige tekst van PostgreSQL maakt gebruik van GIN-indexen en ts_rank voor relevantiescores. ts_rank maakt geen gebruik van globale verzamelingsstatistieken, dus scores verslechteren naarmate gegevens groeien. lakebase_text verbetert dit op twee manieren:

  • BM25-classificatieaccounts voor termfrequentie, documentlengte en corpusbrede statistieken tegelijkertijd, waardoor nauwkeurigere relevantiescores worden geproduceerd dan TF-IDF.
  • Top-K pushdown maakt gebruik van Block-Max WAND om alleen de K meest relevante resultaten van de index te retourneren, zonder elke overeenkomst in de resultatenset te scoren.

Snel starten

Bouw de lakebase_bm25 index na het invoegen van gegevens. BM25 berekent statistieken voor de gehele index tijdens het bouwen van indexen, niet incrementeel, dus moet de index worden gemaakt op een gevulde tabel.

-- 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;

De <@> operator retourneert een negatieve BM25-score. Rangschikken op oplopende score retourneert eerst de meest relevante resultaten.

De index nauwkeurig houden

BM25-statistieken worden berekend bij de buildtijd van de index en bijgewerkt door VACUUM. Voor de meeste workloads blijven de scores regelmatig VACUUM nauwkeurig. Nadat u een grote hoeveelheid nieuwe gegevens bulksgewijs hebt geladen, voert u het volgende handmatig uit VACUUM :

VACUUM documents;

GPC's op sessieniveau

Parameter Typ Verstek Beschrijving
lakebase_bm25.default_limit integer 1000 Maximum aantal resultaten dat wordt geretourneerd door de index.
lakebase_bm25.prefilter boolean false Wanneer true, evalueert WHERE voorwaarden voor het berekenen van BM25-scores. Gebruik deze functie wanneer filters veel rijen elimineren en goedkoop zijn om te evalueren.
lakebase_bm25.enable_scan boolean true Ingesteld op false het afdwingen van een sequentiële scan, waarbij de index wordt overgeslagen. Handig voor testen.
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

GUC's hebben voorrang op indexopslagparameters wanneer beide zijn ingesteld.

Indexopslagparameters

Stel deze opties in tijdens het maken van de index of met ALTER INDEX:

Parameter Typ Verstek Bereik Beschrijving
k1 real 1.2 1.2 tot 2.0 Verzadiging van termfrequentie Hogere waarden geven meer gewicht aan herhaalde termen.
b real 0.75 0.0 tot 1.0 Normalisatie van documentlengte. 0.0 schakelt lengtenormalisatie uit; 1.0 past volledige normalisatie toe.
default_limit integer 1000 1 tot 65535 Terugvallimiet wanneer de sessie-GUC niet is ingesteld.
prefilter boolean false N/A Instelling voor terugvalvoorfilter wanneer de sessie-GUC niet is ingesteld.
-- 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);

API-referentie

Typen

bm25query_tsvector: combineert een query tsvector met de doelindex-id. Wordt gebruikt als de rechteroperand van <@>.

Bedieners

Operator Signature Returns Beschrijving
<@> tsvector <@> bm25query_tsvector double precision Retourneert een negatieve BM25-score. Volgorde oplopend om eerst de meest relevante resultaten te krijgen.

Functions

Function Returns Beschrijving
to_bm25query(query tsvector, index regclass) bm25query_tsvector Hiermee wordt een BM25-queryobject samengesteld op basis van een tsvector en de object-id van de index.

Operatorklassen

Class Standaard voor Beschrijving
tsvector_bm25_ops tsvector Hiermee worden tsvector kolommen toegewezen aan de <@> operator voor BM25-score. Dit is de standaardoperatorklasse voor tsvector ; lakebase_bm25u hoeft deze niet expliciet op te geven.

Volgende stappen