Lakebase-Suche

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.

Lakebase Search fügt Lakebase-Autoscaling-Projekten eine hybride Vektor- und Schlüsselwortsuche hinzu. Aktivieren Sie es einmal in ihren Projekteinstellungen, und installieren Sie dann die lakebase_vector Erweiterungen und lakebase_text Postgres, um mit dem Erstellen von Suchfunktionen zu beginnen.

Lakebase Search bietet zwei ergänzende Suchmethoden. Verwenden Sie entweder eigenständig oder kombinieren Sie sie für die Hybridsuche:

  • Die Vektorsuche (Semantik) findet Zeilen, deren Bedeutung Ihrer Abfrage am nächsten kommt, auch wenn sie keine Wörter teilen. Sie fragen mit einer Einbettung (einem numerischen Vektor, der von einem Modell erzeugt wird) ab, und der Index gibt die nächsten Vektoren nach Entfernung zurück. Verwenden Sie es für Fragen in natürlicher Sprache, Empfehlungen und abrufgestützte Generierung (RAG). Unterstützt von lakebase_vector.
  • Bei der Suche mit Schlüsselwort (Volltext) werden Zeilen nach der Genauen Übereinstimmung mit den genauen Begriffen in Ihrer Abfrage mithilfe der BM25-Relevanzbewertung bewertet. Verwenden Sie es für Namen, Codes und die Suche nach exakten Begriffen, bei denen es auf die genaue Formulierung ankommt. Unterstützt von lakebase_text.
  • Die Hybridsuche führt beide Suchvorgänge aus und kombiniert die Ergebnisse in einer bewerteten Liste, sodass Sie semantisch ähnliche und genaue Begriffsgleiche miteinander erzielen. Verwenden Sie sie, wenn Abfragen Absichten mit bestimmten Begriffen kombinieren, der häufigste Fall in der realen Suche.

Stichwortsuche versus Vektorsuche für die Abfrage „schneller Sportwagen“. Die Stichwortsuche (lakebase_text) findet nur Dokumente, die die eingegebenen Wörter enthalten, und verfehlt dabei Synonyme wie „flottes Automobil“ und „Ferrari 488 Supercar“. Die Vektorsuche (lakebase_vector) platziert die Abfrage und die Dokumente im selben Embedding-Raum und gibt die bedeutungsnächsten Treffer zurück, einschließlich dieser Synonyme.

So funktioniert es

Unter der Haube baut lakebase Search auf zwei Postgres Erweiterungen auf:

  • lakebase_vector fügt die approximative Nächste-Nachbarn-Vektorsuche (ANN) über den Indextyp lakebase_ann hinzu. Es ist ein Drop-In-Begleiter für pgvector: Die gleichen Vektortypen, Entfernungsoperatoren und Abfragesyntax funktionieren ohne Änderung. Intern verwendet es die IVF-Partitionierung mit RaBitQ-Quantisierung, die Indizes mit über 1 Milliarde Vektoren in einem einzelnen Index unterstützt und sich bis zu 50- bis 100-mal schneller als HNSW erstellen lässt. Indizes sind speichergestützt und überstehen einen Scale-to-Zero-Vorgang ohne Aufwärmphase.

  • lakebase_text fügt die BM25-Volltextsuche über den lakebase_bm25 Indextyp hinzu. Es ist kompatibel mit den Standardtypen tsvector und Abfrageoperatoren von PostgreSQL. Das BM25-Ranking berücksichtigt gleichzeitig die Begriffshäufigkeit, die Dokumentlänge und korpusweite Statistiken. Top-K-Pushdown (Block-Max WAND) ruft nur die K relevantesten Ergebnisse aus dem Index ab, anstatt jede Übereinstimmung zu bewerten.

Requirements

  • Postgres 16 oder höher
  • Betazugriff für Ihr Projekt. Lakebase Search befindet sich in der Betaversion; wenden Sie sich an Ihren Databricks-Kontovertreter, um ihn anzufordern.
  • Die Aktivierung von Lakebase Search für ein Projekt kann nicht rückgängig gemacht werden

Nachdem Ihr Projekt Zugriff hat, aktivieren Sie die Lakebase-Suche in Ihren Projekteinstellungen:

  1. Klicken Sie in Ihrem Lakebase-Projekt in der linken Navigation auf "Einstellungen ".
  2. Klicken Sie unter "Lakebase Search" auf " Lakebase Search aktivieren".

Warnung

Aktivieren der Lakebase-Suche:

  • Startet alle Berechnungen in Ihrem Projekt neu, wobei alle aktiven Verbindungen gelöscht werden.
  • Macht die Erweiterungen lakebase_vector und lakebase_text zur Installation verfügbar.
  • Nach der Aktivierung kann nicht deaktiviert werden.

Installieren von Erweiterungen

Installieren Sie nach dem Aktivieren der Lakebase Search die Erweiterungen in Ihrer Datenbank:

-- Required: vector search (CASCADE installs pgvector as a dependency)
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

-- Required: BM25 full-text search
CREATE EXTENSION IF NOT EXISTS lakebase_text;

Erste Schritte

Im folgenden Beispiel wird eine documents Tabelle mit einer Vektorspalte und einer Volltextsuchspalte erstellt. Anschließend werden Vektor- und Schlüsselwortabfragen ausgeführt:

Note

Diese Beispiele verwenden kleine Literalvektoren wie '[0.1, 0.2, 0.3]' zur Veranschaulichung. Generieren Sie in einer echten Anwendung externe Einbettungen mit einem Einbettungsmodell, und speichern Sie dann das Ergebnis in der VECTOR Spalte. Auf Databricks können Sie ein Einbettungsmodell mithilfe von Model Serving abfragen – z. B. mit ai_query einem Notizbuch oder Databricks SQL – und dann die resultierenden Vektoren in Lakebase einfügen. Die VECTOR(n) Spalte und der Index müssen dieselbe Dimension n wie die Ausgabe Ihres Modells verwenden (in der Regel 384 bis 1536).

-- Create a table with a vector column and a tsvector column
CREATE TABLE documents (
  id        SERIAL PRIMARY KEY,
  title     TEXT NOT NULL,
  body      TEXT NOT NULL,
  embedding VECTOR(3),
  body_tsv  TSVECTOR
);

-- Create a vector search index
CREATE INDEX ON documents USING lakebase_ann (embedding vector_cosine_ops);

-- Insert sample data and populate the tsvector column
INSERT INTO documents (title, body, embedding, body_tsv) VALUES
  ('Postgres overview', 'Postgres is an open-source relational database.', '[0.1, 0.2, 0.3]', to_tsvector('english', 'Postgres is an open-source relational database.')),
  ('Vector search guide', 'Vector search finds semantically similar results.', '[0.4, 0.5, 0.6]', to_tsvector('english', 'Vector search finds semantically similar results.')),
  ('Full-text search', 'BM25 ranking improves keyword search relevance.', '[0.7, 0.8, 0.9]', to_tsvector('english', 'BM25 ranking improves keyword search relevance.'));

-- Build the BM25 index after inserting data
-- BM25 computes corpus statistics at build time, not incrementally
CREATE INDEX documents_body_bm25 ON documents USING lakebase_bm25 (body_tsv);

-- Vector similarity search
SELECT id, title
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, 0.3]'
LIMIT 5;

-- BM25 keyword search (lower score = more relevant)
SELECT id, title,
  body_tsv <@> to_bm25query(to_tsvector('english', 'database'), 'documents_body_bm25') AS score
FROM documents
ORDER BY score
LIMIT 5;

Im folgenden Beispiel für die Hybridsuche werden die Tabelle und die documents Indizes aus "Erste Schritte" wiederverwendet. Es ruft die besten Kandidaten aus jeder Suche unabhängig voneinander ab und kombiniert sie dann mithilfe von Reciprocal Rank Fusion (RRF) zu einer einzigen Rangliste: Ergebnisse, die in einer oder beiden Suchen gut platziert sind, werden höher eingestuft.

WITH vector_ranked AS (
  SELECT id, RANK() OVER (ORDER BY dist) AS rank
  FROM (
    SELECT id, embedding <=> '[0.1, 0.2, 0.3]' AS dist
    FROM documents
    ORDER BY dist
    LIMIT 40
  ) v
),
keyword_ranked AS (
  SELECT id, RANK() OVER (ORDER BY score) AS rank
  FROM (
    SELECT id, body_tsv <@> to_bm25query(to_tsvector('english', 'database'), 'documents_body_bm25') AS score
    FROM documents
    ORDER BY score
    LIMIT 40
  ) k
)
SELECT d.id, d.title,
  COALESCE(1.0 / (60 + v.rank), 0) + COALESCE(1.0 / (60 + k.rank), 0) AS rrf_score
FROM documents d
LEFT JOIN vector_ranked v ON d.id = v.id
LEFT JOIN keyword_ranked k ON d.id = k.id
WHERE v.id IS NOT NULL OR k.id IS NOT NULL
ORDER BY rrf_score DESC, d.id
LIMIT 10;

Jede CTE fragt jeweils ihre 40 besten Kandidaten ab. RANK() weist punktgleichen Ergebnissen denselben Rang zu. Die Konstante 60 dämpfet den Einfluss von Ergebnissen mit niedriger Rangfolge und d.id bricht Bindungen für stabile Paginierung. Passen Sie die LIMIT pro Liste und die RRF-Konstante an Ihre Daten an. Auch andere Fusionsmethoden, z. B. gewichtete Bewertungen, sind gültig.

Extensions

Extension Purpose Indextyp
lakebase_vector ANN-Vektorsuche, pgvector-kompatibel lakebase_ann
lakebase_text BM25 Volltextsuche, FTS-kompatibel lakebase_bm25