Lakebase-sökning

Viktigt!

Den här funktionen finns i Beta. Arbetsyteadministratörer kan styra åtkomsten till den här funktionen från sidan Förhandsversioner . Se Hantera förhandsversioner av Azure Databricks.

Lakebase Search lägger till hybridvektor- och nyckelordssökning till Lakebase-projekt. Aktivera det en gång i projektinställningarna och installera sedan postgres-tilläggen lakebase_vector och lakebase_text börja skapa sökfunktioner.

Lakebase Search innehåller två kompletterande sökmetoder. Använd antingen på egen hand eller kombinera dem för hybridsökning:

  • Vektorsökning (semantisk) hittar rader vars betydelse ligger närmast din fråga, även om de inte delar några ord. Du frågar med en inbäddning (en numerisk vektor som skapas av en modell) och indexet returnerar närmaste vektorer efter avstånd. Använd den för frågor, rekommendationer och hämtningsförhöjd generation (RAG) på naturligt språk. Drivs av lakebase_vector.
  • Nyckelordssökning (fulltext) rangordnar rader efter hur väl de matchar de exakta termerna i din fråga med hjälp av BM25-relevansbedömning. Använd den för namn, koder och exakta termsökningar där formuleringar är viktiga. Drivs av lakebase_text.
  • Hybridsökningen kör både sökningar och kombinerar resultatet till en rangordnad lista, så att du får semantiskt likartade och exakta matchningar tillsammans. Använd den när frågor blandar avsikt med specifika termer, det vanligaste fallet i verklig sökning.

Nyckelord kontra vektorsökning för frågan

Så här fungerar det

Under huven bygger Lakebase Search på två Postgres-tillägg:

  • lakebase_vector lägger till ungefärlig vektorsökning med närmaste granne (ANN) via lakebase_ann indextypen. Det är en drop-in-koppling till pgvector: samma vektortyper, avståndsoperatorer och frågesyntax fungerar utan ändringar. Internt använder den sig av IVF-partitionering med RaBitQ-kvantisering, som stöder index med över 1 miljard vektorer i ett enda index och kan byggas upp till 50–100 gånger snabbare än HNSW. Index är lagringsbaserade och överlever skalning till noll utan uppvärmning.

  • lakebase_text lägger till BM25-fulltextsökning via lakebase_bm25 indextypen. Den är kompatibel med PostgreSQL:s standardtyper tsvector och frågeoperatorer. BM25-rangordning tar samtidigt hänsyn till termfrekvens, dokumentlängd och korpusövergripande statistik. Top-K pushdown (Block-Max WAND) hämtar endast de K mest relevanta resultaten från indexet i stället för att göra poäng varje match.

Du kan erbjuda sökning i data som kommer från lakehouse, inte bara data som skrivs direkt till Postgres. Använd synkade tabeller för att synka en Unity-katalogtabell till Lakebase, och mappa dess kolumner till sökklara Postgres-typer under synkroniseringen:

När synkroniseringen har slutförts bygger du ett lakebase_ann- eller lakebase_bm25-index på den synkroniserade kolumnen och tillhandahåller sökning med låg latens till dina applikationer tillsammans med dina driftsdata. För kartläggningskonfigurationen, se Anpassad typ av kartläggning för Lakebase Search.

Requirements

  • Postgres 16 eller senare
  • Betaåtkomst för projektet. Lakebase Search är i betaversion; kontakta din Databricks-kontorepresentant för att begära det.
  • Att aktivera Lakebase Search för ett projekt kan inte ångras

När projektet har åtkomst aktiverar du Lakebase Search i projektinställningarna:

  1. I Lakebase-projektet klickar du på Inställningar i det vänstra navigeringsfältet.
  2. Under Lakebase Search klickar du på Aktivera Lakebase Search.

Varning

Aktivera Lakebase Search:

  • Startar om alla beräkningar i projektet och släpper alla aktiva anslutningar
  • Gör tilläggen lakebase_vector och lakebase_text tillgängliga för installation
  • Det går inte att stänga av när det är aktiverat

Installera tillägg

När du har aktiverat Lakebase Search installerar du tilläggen i databasen:

-- 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;

Get started

I följande exempel skapas en documents tabell med både en vektorkolumn och en fulltextsökningskolumn och kör sedan vektor- och nyckelordsfrågor:

Note

De här exemplen använder små literalvektorer som '[0.1, 0.2, 0.3]' för illustration. I ett verkligt program genererar du inbäddningar externt med en inbäddningsmodell och lagrar sedan resultatet i VECTOR kolumnen. På Databricks kan du fråga en inbäddningsmodell med hjälp av Modellservern , till exempel med ai_query i en notebook-fil eller Databricks SQL, och sedan infoga de resulterande vektorerna i Lakebase. Kolumnen VECTOR(n) och indexet måste använda samma dimension n som modellens utdata (vanligtvis 384 till 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;

Följande hybridsökningsexempel återanvänder documents tabellen och indexen från Kom igång. Den hämtar toppkandidaterna från varje sökning oberoende av varandra och kombinerar dem sedan till en enda rangordning med hjälp av Reciprocal Rank Fusion (RRF): resultat som rankas bra i någon av eller båda sökningarna får högre poäng.

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;

Varje CTE hämtar sina egna topp 40 kandidater. RANK() tilldelar samma rankning till lika poäng. Konstanten 60 dämpar påverkan av lågrankade resultat och d.id bryter banden för stabil sidnumrering. Justera LIMIT för varje lista och RRF-konstanten utifrån dina data. Andra fusionsmetoder, till exempel viktad bedömning, är också giltiga.

Förlängningar

Extension Purpose Indextyp
lakebase_vector ANN-vektorsökning, pgvector-kompatibel lakebase_ann
lakebase_text BM25 fulltextsökning, FTS-kompatibel lakebase_bm25