lakebase_text

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;

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;

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.

Nächste Schritte