Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Dieses Feature befindet sich in der Betaversion. Arbeitsbereichsadministratoren können den Zugriff auf dieses Feature über die Vorschauseite steuern. Siehe Manage Azure Databricks Previews.
Die lakebase_text Erweiterung fügt die BM25-Volltextsuche über den lakebase_bm25 Indextyp zu Lakebase hinzu. Sie ist kompatibel mit den Standardtyp tsvector - und Abfrageoperatoren von PostgreSQL.
Install
Aktivieren Sie zunächst die Lakebase-Suche in Ihren Projekteinstellungen. Installieren Sie dann die Erweiterung:
CREATE EXTENSION IF NOT EXISTS lakebase_text;
Warum lakebase_text anstelle der standardmäßigen GIN-Volltextsuche
Die integrierte Volltextsuche von PostgreSQL verwendet GIN-Indizes und ts_rank für die Relevanzbewertung.
ts_rank verwendet keine globalen Korpusstatistiken, sodass die Bewertungen beeinträchtigt werden, wenn daten wachsen.
lakebase_text verbessert dies auf zwei Arten:
- DIE BM25-Rangfolge führt gleichzeitig zu Begriffshäufigkeits-, Dokumentlängen- und korpusweiten Statistiken und erzeugt genauere Relevanzbewertungen als TF-IDF.
- Top-K Pushdown verwendet Block-Max WAND, um nur die wichtigsten K-Ergebnisse aus dem Index zurückzugeben, ohne jede Übereinstimmung im Resultset zu bewerten.
Schnellstart
Erstellen Sie den Index nach dem lakebase_bm25 Einfügen von Daten. BM25 berechnet korpusweite Statistiken zur Indexerstellungszeit und nicht inkrementell, sodass der Index in einer aufgefüllten Tabelle erstellt werden muss.
-- 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;
Der <@> Operator gibt einen negativen BM25-Wert zurück. Die Sortierung nach aufsteigender Bewertung gibt zuerst die relevantesten Ergebnisse zurück.
Den Index genau halten
BM25-Statistiken werden zur Indexbuildzeit berechnet und von VACUUM. Bei den meisten Arbeitslasten werden die Ergebnisse regelmäßig VACUUM genau beibehalten. Führen Sie VACUUM nach dem Massenladen einer großen Menge neuer Daten manuell aus:
VACUUM documents;
Optimieren der Suche
GUCs auf Sitzungsebene
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
lakebase_bm25.default_limit |
integer | 1000 |
Maximale Anzahl von Ergebnissen, die aus dem Index zurückgegeben werden. |
lakebase_bm25.prefilter |
boolean | false |
Wenn true, wertet WHERE Bedingungen vor dem Berechnen von BM25-Bewertungen aus. Verwenden Sie diese Funktion, wenn Filter viele Zeilen beseitigen und günstig ausgewertet werden können. |
lakebase_bm25.enable_scan |
boolean | true |
Wird so festgelegt, dass false ein sequenzieller Scan erzwungen wird und der Index umgangen wird. Nützlich für Tests. |
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;
GUCs haben Vorrang vor Indexspeicherparametern, wenn beide festgelegt sind.
Indexspeicherparameter
Legen Sie diese Optionen zur Indexerstellungszeit oder mit ALTER INDEX:
| Parameter | Typ | Standard | Bereich | Beschreibung |
|---|---|---|---|---|
k1 |
real | 1.2 |
1.2 bis 2.0 | Sättigung der Termhäufigkeit. Höhere Werte verleihen wiederholten Ausdrücken mehr Gewicht. |
b |
real | 0.75 |
0.0 bis 1.0 | Normalisierung der Dokumentlänge.
0.0 deaktiviert die Längennormalisierung; 1.0 wendet die vollständige Normalisierung an. |
default_limit |
integer | 1000 |
1 bis 65535 | Fallbacklimit, wenn die Sitzungs-GUC nicht festgelegt ist. |
prefilter |
boolean | false |
N/A | Fallbackvorfiltereinstellung, wenn die Sitzungs-GUC nicht festgelegt ist. |
-- 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-Referenz
Typen
bm25query_tsvector: kombiniert eine Abfrage tsvector mit dem Zielindexbezeichner. Wird als der rechte Operand von <@>.
Betriebspersonal
| Operator | Signature | Rückkehr | Beschreibung |
|---|---|---|---|
<@> |
tsvector <@> bm25query_tsvector |
double precision |
Gibt einen negativen BM25-Wert zurück. Ordnen Sie aufsteigend an, um zuerst die relevantesten Ergebnisse zu erhalten. |
Functions
| Function | Rückkehr | Beschreibung |
|---|---|---|
to_bm25query(query tsvector, index regclass) |
bm25query_tsvector |
Erstellt ein BM25-Abfrageobjekt aus einem tsvector und dem Objektbezeichner des Indexes. |
Operatorklassen
| Klasse | Standard für | Beschreibung |
|---|---|---|
tsvector_bm25_ops |
tsvector |
Ordnet tsvector spalten dem Operator für die <@> BM25-Bewertung zu. Dies ist die Standardoperatorklasse für tsvector ; lakebase_bm25Sie müssen sie nicht explizit angeben. |