Recherche Lakebase
Bêta
Cette fonctionnalité est en Bêta. Les administrateurs du Workspace peuvent contrôler l'accès à cette fonctionnalité à partir de la page Previews . Consultez Gérer les aperçus Databricks.
La recherche Lakebase ajoute la recherche hybride par vecteur et par mot-clé aux projets Lakebase Autoscaling. Activez-le une fois dans les paramètres de votre projet, puis installez les extensions Postgres lakebase_vector et lakebase_text pour start à créer des fonctionnalités de recherche.
Recherche vectorielle, par mot-clé et hybride
Lakebase Search fournit deux méthodes de recherche complémentaires. Utilisez-les individuellement ou combinez-les pour une recherche hybride :
- La recherche vectorielle (sémantique) trouve les lignes dont le sens est le plus proche de votre requête, même si elles ne partagent aucun mot. Vous envoyez une requête avec une incorporation (un vecteur numérique produit par un modèle), et l'index renvoie les vecteurs les plus proches par distance. Utilisez-le pour les questions en langage naturel, les recommandations et la génération augmentée par récupération (RAG). Propulsé par
lakebase_vector. - Recherche par mots-clés (texte intégral) classe les lignes en fonction de leur correspondance aux termes exacts de votre requête, à l'aide de la notation de pertinence BM25. Utilisez-le pour les noms, les codes et les recherches de termes exacts où la formulation est importante. Une technologie
lakebase_text. - La recherche hybride exécute les deux recherches et combine les résultats dans une liste classée unique, de sorte que vous obtenez des correspondances sémantiquement similaires et des correspondances de termes exactes ensemble. Utilisez-le lorsque les requêtes mélangent l'intention avec des termes spécifiques, le cas le plus courant dans la recherche réelle.

Comment cela fonctionne
En arrière-plan, Lakebase Search est basé sur deux extensions Postgres :
-
lakebase_vector ajoute la recherche de vecteurs par plus proche voisin approximatif (ANN) via le type d'index
lakebase_ann. C'est un compagnon intégré à pgvector: les mêmes types de vecteurs, opérateurs de distance et syntaxe de query fonctionnent sans modification. En interne, il utilise le partitionnement IVF avec la quantification RaBitQ, qui prend en charge les index de plus de 1 milliard de vecteurs sur un seul index et se construit 50 à 100 fois plus rapidement que HNSW. Les index sont adossés au stockage et survivent à la mise à l'échelle jusqu'à zéro sans préchauffage. -
lakebase_text ajoute la recherche en texte intégral BM25 via le type d'index
lakebase_bm25. Il est compatible avec les typestsvectorstandard et les opérateurs de query de PostgreSQL. Le classement BM25 tient compte simultanément de la fréquence des termes, de la longueur des documents et des statistiques à l'échelle du corpus. Le pushdown Top-K (Block-Max WAND) récupère uniquement les K résultats les plus pertinents de l'index au lieu de noter chaque correspondance.
Exigences
- Postgres 16 ou version ultérieure
- Accès Bêta pour votre projet. Lakebase Search est en version bêta ; contactez votre représentant de compte Databricks pour le demander.
- L'activation de Lakebase Search sur un projet est irréversible.
Activer la recherche Lakebase
Une fois que votre projet a accès, activez la recherche Lakebase dans les paramètres de votre projet :
- Dans votre projet Lakebase, cliquez sur Paramètres dans la navigation de gauche.
- Sous Lakebase Search , cliquez sur Activer Lakebase Search .
Activation de Lakebase Search :
- Redémarre tous les computes de votre projet, en abandonnant toutes les connexions actives
- Met les extensions
lakebase_vectoretlakebase_textà disposition pour l'installation - Ne peut pas être désactivé une fois activé
Installer des extensions
Après avoir activé Lakebase Search, installez les extensions dans votre base de données :
-- 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 start
L'exemple suivant crée une table documents avec une colonne vectorielle et une colonne de recherche en texte intégral, puis exécute des queries vectorielles et par mots-clés :
Ces exemples utilisent de petits vecteurs littéraux comme '[0.1, 0.2, 0.3]' à titre d’illustration. Dans une application réelle, générez des embeddings en externe avec un modèle d'embedding, puis stockez le résultat dans la colonne VECTOR. Sur Databricks, vous pouvez query un modèle d'embedding à l'aide de Model Serving — par exemple, avec ai_query dans un notebook ou Databricks SQL — puis insérer les vecteurs résultants dans Lakebase. La colonne VECTOR(n) et l’index doivent utiliser la même dimension n que la sortie de votre modèle (généralement de 384 à 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;
Combiner les résultats avec la recherche hybride
L'exemple de recherche hybride suivant réutilise la table et les index documents de Prise en main. Il récupère les meilleurs candidats de chaque recherche indépendamment, puis les combine en un seul classement à l'aide de la fusion de rangs réciproques (RRF) : les résultats qui se classent bien dans l'une ou l'autre des recherches obtiennent un score plus élevé.
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;
Chaque CTE récupère ses 40 meilleurs candidats. RANK() attribue le même rang aux scores à égalité. La constante 60 atténue l'influence des résultats mal classés, et d.id résout les égalités pour une pagination stable. Ajustez le LIMIT par liste et la constante RRF pour vos données. D'autres méthodes de fusion, telles que la notation pondérée, sont également valides.
Extensions
Extension | Objectif | Type d'index |
|---|---|---|
Recherche vectorielle ANN, compatible pgvector |
| |
Recherche en texte intégral BM25, compatible FTS |
|