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.
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;
Upgrade der Erweiterung und der Indizes
Eine neue Lakebase Search-Version kann Funktionen, Korrekturen und Leistungsverbesserungen hinzufügen. Obwohl Lakebase Search im Rahmen von Lakebase-Updates veröffentlicht wird, wird nicht alles automatisch aktualisiert. In lakebase_text, werden zwei Dinge separat aufgerüstet und tragen Versionsnummern, die nicht zueinander zusammenhängen:
-
Die Erweiterungsversion ist die Version der SQL-Objekte, die
CREATE EXTENSION lakebase_texterstellt werden, einschließlich ihrer Datentypen, Funktionen, Operatoren und derlakebase_bm25Indexzugriffsmethode. Diese Version wird vonSELECT installed_version FROM pg_available_extensions WHERE name = 'lakebase_text'berichtet.ALTER EXTENSION lakebase_text UPDATEAktualisiert diese Version. -
Das Index-Speicherformat ist das Festplattenlayout eines
lakebase_bm25Indexes. Die Erweiterung könnte in einem Update aktualisierte Indexspeicherformate einführen, mehr Funktionen freischalten und eine bessere Leistung liefern. Alle neu erstellten Indizes verwenden automatisch das neueste Speicherformat, während bestehende Indizes auf das neue FormatREINDEX INDEX CONCURRENTLYaufgerüstet werden können, nachdem ein neueres Speicherformat verfügbar ist.
Ein Upgrade ist nicht dringend. Die Erweiterung ist kompatibel mit SQL-Objekten und Indexspeicherformaten älterer Versionen, aber aktuell zu bleiben, hält Sie auf dem unterstützten, leistungsfähigsten Weg und vermeidet eine größere Migration später, daher sollten Sie bei Bequemlichkeit upgraden und nicht unbegrenzt verschieben.
Hinweis
Die aktuellste verfügbare Erweiterungsversion wird von SELECT default_version FROM pg_available_extensions WHERE name = 'lakebase_text'berichtet.
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.
Hinweis
Ein Index-Scan lakebase_bm25 kann beliebig viele Zeilen weglassen, deren <@> Wert genau 0.0ist. Verlassen Sie sich nicht darauf, dass Null-Distanz-Zeilen zurückgegeben werden oder auf deren Reihenfolge zurückgegeben werden. Um jede Zeile zu evaluieren, setzen lakebase_bm25.enable_scan Sie stattdessen auf off einen sequentiellen Scan.
Aus synchronisierten Tabellen befüllen
Wenn du Quelltext aus Unity Catalog lädst, anstatt ihn direkt einzufügen, können synchronisierte Tabellen während der Synchronisation eine tsvector Spalte generieren, die sofort nach Abschluss der Synchronisation indexiert lakebase_bm25 werden kann. Siehe Benutzerdefinierte Typzuordnung für Lakebase Search.
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;
Um die Abfrage- und Aktualisierungsleistung aufrechtzuerhalten, VACUUM muss der Index umgehend bereinigt werden. Für eine Tabelle, die der Textsuche gewidmet ist, empfiehlt Databricks, so einzustellen autovacuum_vacuum_insert_scale_factor0 , dass die vom Einfügen ausgelöste Autovakuum-Schwelle nicht mit der Tabelle wächst:
ALTER TABLE documents SET (
autovacuum_vacuum_insert_scale_factor = 0
);
Mit dem auf gesetzten 0Skalierungsfaktor bestimmt die autovacuum_vacuum_insert_threshold feste Anzahl der eingefügten Tupel, die Autovacuum auslöst. Passe diese Schwelle je nach Arbeitsbelastung an.
Warnung
Die globalen BM25-Statistiken sind nicht MVCC-versioniert. Wenn VACUUM die Statistik aktualisiert wird, während eine Transaktion einen älteren MVCC-Snapshot verwendet, kann die Transaktion Scores mit neueren Statistiken als ihrem Zeilensnapshot berechnen. Die Zeilensichtbarkeit bleibt MVCC-konform, aber Wertungen, Rankings und Top-K-Ergebnisse können sich innerhalb einer REPEATABLE READ Transaktion ändern. Verlassen Sie sich nicht auf snapshot-stabile BM25-Rankings über ein Gleichwert VACUUM, einschließlich Autovacuum.
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. |