lakebase_text

Important

Den här funktionen finns i Beta. Arbetsyteadministratörer kan styra åtkomsten till den här funktionen från sidan Förhandsversioner . Se Hantera förhandsversioner av Azure Databricks.

Tillägget lakebase_text lägger till BM25 fulltextsökning till Lakebase via lakebase_bm25 indextypen. Den är kompatibel med PostgreSQL:s standardtyp tsvector - och frågeoperatorer.

Install

Aktivera Först Lakebase Search i dina projektinställningar. Installera sedan tillägget:

CREATE EXTENSION IF NOT EXISTS lakebase_text;

PostgreSQL:s inbyggda fulltextsökning använder GIN-index och ts_rank för relevansbedömning. ts_rank använder inte global corpus-statistik, så poängen försämras när data växer. lakebase_text förbättrar detta på två sätt:

  • BM25-rankningskonton för termfrekvens, dokumentlängd och corpus-wide-statistik samtidigt, vilket ger mer exakta relevanspoäng än TF-IDF.
  • Top-K pushdown använder Block-Max WAND för att endast returnera de K mest relevanta resultaten från indexet, utan att bedöma varje matchning i resultatuppsättningen.

Snabbstart

Skapa indexet lakebase_bm25 när du har infogat data. BM25 beräknar corpus-wide-statistik vid indexet byggtid, inte inkrementellt, så indexet måste skapas i en ifylld tabell.

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

Operatorn <@> returnerar en negativ BM25-poäng. När du beställer efter stigande poäng returneras de mest relevanta resultaten först.

Befolka från synkade tabeller

Om du laddar källtext från Unity Catalog istället för att infoga den direkt, kan synkade tabeller generera en tsvector kolumn under synkroniseringen, redo att indexeras med lakebase_bm25 så snart synkroniseringen är klar. Se Anpassad typmappning för Lakebase Search.

Håll indexet korrekt

BM25-statistik beräknas vid indexet byggtid och uppdateras av VACUUM. För de flesta arbetsbelastningar håller regelbundna VACUUM poäng korrekta. När du har massinläsning av en stor mängd nya data kör du VACUUM manuellt:

VACUUM documents;

Sessionsnivå-GUC:er

Parameter Type Förinställning Description
lakebase_bm25.default_limit integer 1000 Maximalt antal resultat som returneras från indexet.
lakebase_bm25.prefilter boolean false När trueutvärderar villkor innan BM25-poäng beräknas WHERE . Använd när filter eliminerar många rader och är billiga att utvärdera.
lakebase_bm25.enable_scan boolean true Ange till för false att framtvinga en sekventiell genomsökning genom att kringgå indexet. Användbart för testning.
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

GUC:er har företräde framför indexlagringsparametrar när båda anges.

Indexlagringsparametrar

Ange dessa alternativ när indexet skapas eller med ALTER INDEX:

Parameter Type Förinställning Räckvidd Description
k1 real 1.2 1.2 till 2.0 Termfrekvensmättnad. Högre värden ger större vikt åt upprepade termer.
b real 0.75 0,0 till 1,0 Normalisering av dokumentlängd. 0.0 inaktiverar längdnormalisering. 1.0 tillämpar fullständig normalisering.
default_limit integer 1000 1 till 65535 Återställningsgräns när sessionens GUC inte har angetts.
prefilter boolean false N/A Inställning för reservförfilter när sessionens GUC inte har angetts.
-- 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-referens

Typer

bm25query_tsvector: kombinerar en fråga tsvector med målindexidentifieraren. Används som rätt operand i <@>.

Operatörer

Operator Signature Returns Description
<@> tsvector <@> bm25query_tsvector double precision Returnerar en negativ BM25-poäng. Beställ stigande för att få de mest relevanta resultaten först.

Functions

Function Returns Description
to_bm25query(query tsvector, index regclass) bm25query_tsvector Konstruerar ett BM25-frågeobjekt från en tsvector och indexets objektidentifierare.

Operatorklasser

Class Standard för Description
tsvector_bm25_ops tsvector Mappar tsvector kolumner till operatorn <@> för BM25-bedömning. Det här är standardoperatorklassen för tsvector med lakebase_bm25. Du behöver inte uttryckligen ange den.

Nästa steg