Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Cette fonctionnalité est en version bêta. Les administrateurs d’espace de travail peuvent contrôler l’accès à cette fonctionnalité à partir de la page Aperçus . Consultez Gérer les préversions d’Azure Databricks.
Lakebase Search ajoute un système hybride de recherche vectorielle et mot-clé aux projets Lakebase. Activez-le une fois dans les paramètres de votre projet, puis installez les lakebase_vectorlakebase_text extensions Postgres pour commencer à créer des fonctionnalités de recherche.
Vector, mot clé et recherche hybride
Lakebase Search fournit deux méthodes de recherche complémentaires. Utilisez-les par elle-même ou combinez-les pour la recherche hybride :
-
La recherche vector (sémantique) recherche des lignes dont la signification est la plus proche de votre requête, même lorsqu’elles ne partagent aucun mot. Vous effectuez une requête à l’aide d’un embedding (un vecteur numérique produit par un modèle), et l’indice renvoie les vecteurs les plus proches selon la distance. Utilisez-le pour les questions, recommandations et génération augmentée de récupération (RAG) en langage naturel. Alimenté par
lakebase_vector. -
La recherche par mot clé (texte intégral) classe les lignes en fonction de leur niveau de correspondance avec les termes exacts de votre requête, à l’aide du scoring de pertinence BM25. Utilisez-le pour les noms, les codes et les recherches exactes dans lesquelles la formulation est importante. Alimenté par
lakebase_text. - La recherche hybride exécute à la fois des recherches et combine les résultats dans une liste classée, de sorte que vous obtenez des correspondances sémantiquement similaires et exactes. Utilisez-la lorsque les requêtes combinent l’intention avec des termes spécifiques, le cas le plus courant dans la recherche réelle.
Fonctionnement
Sous le capot, Lakebase Search repose sur deux extensions Postgres :
lakebase_vector ajoute une recherche de vecteur proche approximative (ANN) par le biais du type d’index
lakebase_ann. Il s’agit d’un compagnon de dépôt pour pgvector : les mêmes types de vecteurs, opérateurs de distance et syntaxe de requête fonctionnent sans modification. En interne, il utilise le partitionnement IVF avec la quantification RaBitQ, qui prend en charge des index contenant plus d’un milliard de vecteurs dans un seul index et permet de les construire jusqu’à 50 à 100 fois plus rapidement que HNSW. Les index sont adossés au stockage et restent disponibles après un scale-to-zero, sans phase de préchauffage.lakebase_text ajoute la recherche en texte intégral BM25 via le type d’index
lakebase_bm25. Il est compatible avec les types standardtsvectoret les opérateurs de requête de PostgreSQL. Le classement BM25 prend en compte simultanément la fréquence des termes, la longueur du document et les statistiques globales du corpus. Top-K pushdown (Block-Max WAND) récupère uniquement les K résultats les plus pertinents depuis l’index, au lieu d’attribuer un score à chaque correspondance.
Exploiter les données du lakehouse pour la recherche
Vous pouvez proposer la recherche sur des données provenant du lakehouse, et pas seulement sur des données écrites directement dans Postgres. Utilisez des tables synchronisées pour synchroniser une table du catalogue Unity dans Lakebase, et mappez ses colonnes aux types Postgres prêts à la recherche pendant la synchronisation :
- Associez une colonne d’inclusion à une
vector(n)colonne pour la recherche vectorielle. - Générez une
tsvectorcolonne à partir du texte source pour la recherche par mot-clé.
Une fois la synchronisation terminée, créez un index lakebase_ann ou lakebase_bm25 sur la colonne synchronisée et fournissez à vos applications une recherche à faible latence aux côtés de vos données opérationnelles. Pour la configuration du mappage, voir Mappage de types personnalisé pour Lakebase Search.
Requirements
- Postgres 16 ou version ultérieure
- Accès bêta pour votre projet. La recherche Lakebase est en version bêta ; contactez votre représentant de compte Databricks pour le demander.
- L’activation de la recherche Lakebase 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 le volet de navigation gauche.
- Sous Recherche Lakebase, cliquez sur Activer la recherche Lakebase.
Warning
Activation de la recherche Lakebase :
- Redémarre tous les calculs de votre projet, en supprimant toutes les connexions actives
- Rend les extensions
lakebase_vectoretlakebase_textdisponibles à l’installation - Impossible de désactiver une fois activé
Installer les extensions
Après avoir activé La recherche Lakebase, 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 started
L’exemple suivant crée une table avec une documents colonne vectorielle et une colonne de recherche en texte intégral, puis exécute des requêtes de vecteur et de mot clé :
Note
Ces exemples utilisent de petits vecteurs littéraux comme '[0.1, 0.2, 0.3]' pour l’illustration. Dans une application réelle, générez des incorporations en externe avec un modèle d’incorporation, puis stockez le résultat dans la VECTOR colonne. Sur Databricks, vous pouvez interroger un modèle d’incorporation à l’aide de Model Serving ( par exemple, ai_query dans un notebook ou Databricks SQL), puis insérer les vecteurs résultants dans Lakebase. La VECTOR(n) colonne et l’index doivent utiliser la même dimension n que la sortie de votre modèle (généralement 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 des résultats avec la recherche hybride
L’exemple de recherche hybride suivant réutilise la table documents et les index de Get started. Il récupère indépendamment les meilleurs candidats de chaque recherche, puis les combine en un classement unique à l’aide de la méthode Reciprocal Rank Fusion (RRF) : les résultats bien classés dans l’une ou l’autre des recherches, ou dans les deux, 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 propres 40 meilleurs candidats.
RANK() attribue le même rang aux scores liés. La constante 60 amortit l’influence des résultats classés bas et d.id interrompt les liens pour la pagination stable. Ajustez le LIMIT par liste ainsi que la constante RRF pour vos données. D’autres méthodes de fusion, telles que le scoring pondéré, sont également valides.
Extensions
| Extension | Purpose | Type d’index |
|---|---|---|
| lakebase_vector | Recherche vectorielle ANN, compatible avec pgvector | lakebase_ann |
| lakebase_text | Recherche en texte intégral BM25, compatible FTS | lakebase_bm25 |