Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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;
Varför lakebase_text i stället för vanlig GIN-fulltextsökning
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;
Finjustera sökning
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. |