Lakebase Search

Důležité

Tato funkce je v beta verzi. Správci pracovního prostoru můžou řídit přístup k této funkci ze stránky Previews . Viz Manage Azure Databricks preview.

Služba Lakebase Search přidává do projektů automatického škálování Lakebase hybridní vektor a vyhledávání klíčových slov. Stačí jej povolit v nastavení projektu a poté nainstalovat rozšíření Postgres lakebase_vector a lakebase_text, abyste mohli začít vytvářet funkce pro vyhledávání.

Lakebase Search poskytuje dvě doplňkové metody hledání. Použijte je buď samostatně, nebo je zkombinujte pro hybridní vyhledávání:

  • Vektorové (sémantické) hledání najde řádky, jejichž význam je nejblíže vašemu dotazu, i když sdílejí žádná slova. Dotazujete se pomocí vkládání (číselného vektoru vytvořeného modelem) a index vrátí nejbližší vektory podle vzdálenosti. Použijte ho pro dotazy v přirozeném jazyce, doporučení a generování rozšířené o vyhledávání (RAG). Využívá technologii lakebase_vector.
  • Klíčové slovo (fulltextové) vyhledávání řadí řádky podle toho, jak dobře odpovídají přesným termíny v dotazu pomocí vyhodnocování relevance BM25. Použijte ho pro názvy, kódy a přesné vyhledávání termínů, ve kterých záleží na formulaci. Využívá technologii lakebase_text.
  • Hybridní vyhledávání provádí obě vyhledávání a kombinuje výsledky do jednoho seřazeného seznamu, takže získáte sémanticky podobné výsledky i přesné shody výrazů. Použijte ho, když dotazy kombinují záměr s konkrétními termíny, nejběžnějším případem při hledání v reálném světě.

Vyhledávání podle klíčových slov versus vektorové vyhledávání pro dotaz „rychlé sportovní auto.“ Vyhledávání podle klíčových slov (lakebase_text) najde pouze dokumenty obsahující zadaná slova a přehlédne synonyma jako „rychlý automobil“ a „supersport Ferrari 488“. Vektorové vyhledávání (lakebase_vector) umístí dotaz i dokumenty do stejného embeddingového prostoru a vrací nejbližší sousedy podle významu, včetně těchto synonym.

Jak to funguje

Služba Lakebase Search je postavená na dvou rozšířeních Postgres:

  • lakebase_vector přidá přes typ indexu přibližné vektorové vyhledávání nejbližšího souseda lakebase_ann (ANN). Je to doplněk pro pgvector: stejné typy vektorů, operátory vzdálenosti a syntaxe dotazů fungují beze změny. Interně využívá dělení IVF s kvantizací RaBitQ, která umožňuje indexy s více než 1 miliardou vektorů v rámci jediného indexu a vytváří je až 50–100× rychleji než HNSW. Indexy jsou uložené v úložišti a přežijí škálování na nulu bez nutnosti zahřívání.

  • lakebase_text přidává fulltextové vyhledávání BM25 pomocí typu indexu lakebase_bm25. Je kompatibilní se standardními tsvector typy a operátory dotazů PostgreSQL. Řazení BM25 současně zohledňuje frekvenci termínů, délku dokumentů a statistiky napříč celým korpusem. Top-K pushdown (Block-Max WAND) získá z indexu pouze K nejrelevantnějších výsledků místo bodování každé shody.

Requirements

  • Postgres 16 nebo novější
  • Přístup k beta verzi projektu. Lakebase Search je ve verzi beta; obraťte se na svého obchodního zástupce Databricks a požádejte o ni.
  • Povolení služby Lakebase Search v projektu je nevratné.

Jakmile má váš projekt přístup, povolte v nastavení projektu funkci Lakebase Search:

  1. V projektu Lakebase klikněte v levém navigačním panelu na Nastavení .
  2. V části Lakebase Search klikněte na Povolit službu Lakebase Search.

Warning

Povolení služby Lakebase Search:

  • Restartuje všechny výpočetní prostředky v projektu a vyřazuje všechna aktivní připojení.
  • Zpřístupňuje instalaci lakebase_vector a lakebase_text rozšíření.
  • Po povolení nelze vypnout

Instalace rozšíření

Po povolení služby Lakebase Search nainstalujte rozšíření do databáze:

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

Začínáme

Následující příklad vytvoří documents tabulku s vektorovým sloupcem i fulltextovým vyhledávacím sloupcem a potom spustí vektorové a klíčové dotazy:

Note

Tyto příklady používají pro ilustraci malé literální vektory '[0.1, 0.2, 0.3]' . V reálné aplikaci vygenerujte vložení externě pomocí modelu vkládání a uložte výsledek do VECTOR sloupce. V Databricks můžete dotazovat model vkládání pomocí služby Model Serving ( například v ai_query poznámkovém bloku nebo Databricks SQL) a potom vložit výsledné vektory do Lakebase. Sloupec VECTOR(n) a index musí používat stejnou dimenzi n jako výstup modelu (obvykle 384 až 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;

Následující příklad hybridního documents vyhledávání opět používá tabulku a indexy z Začínáme. Nejprve nezávisle získá nejlepší kandidáty z každého vyhledávání a poté je zkombinuje do jediného žebříčku pomocí metody Reciprocal Rank Fusion (RRF): výsledky, které se umístí vysoko v jednom nebo obou vyhledáváních, získají vyšší skóre.

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;

Každý CTE načte svých vlastních 40 nejlepších kandidátů. RANK() přiřadí stejné pořadí stejným výsledkům. Konstanta 60 tlumí vliv výsledků s nízkým pořadím a d.id přeruší vazby pro stabilní stránkování. Vylaďte hodnoty per-list LIMIT a konstantu RRF pro vaše data. Jiné fúzní metody, například vážené bodování, jsou také platné.

Extensions

Extension Purpose Typ indexu
lakebase_vector Hledání vektorů ANN, kompatibilní s pgvectorem lakebase_ann
lakebase_text BM25 fulltextové vyhledávání, kompatibilní s FTS lakebase_bm25