Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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;
Waarom lakebase_text in plaats van standaard gin zoeken in volledige tekst
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;
Zoeken afstemmen
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. |