lakebase_vector
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.
L'extension lakebase_vector ajoute la recherche vectorielle de plus proche voisin approximatif (ANN) à Lakebase via le type d'index lakebase_ann. C'est un complément direct à pgvector: les mêmes types de vecteurs, opérateurs de distance et syntaxe de requête fonctionnent sans modification.
Installer
Tout d'abord, activez la recherche Lakebase dans les paramètres de votre projet. Puis installez l'extension :
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;
Le mot-clé CASCADE installe automatiquement pgvector en tant que dépendance.
Quick start
-- Create a table with a vector column
CREATE TABLE items (id BIGSERIAL PRIMARY KEY, embedding VECTOR(3));
-- Insert sample data
INSERT INTO items (embedding)
SELECT ARRAY[random(), random(), random()]::real[]
FROM generate_series(1, 1000);
-- Create a lakebase_ann index
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops);
-- Query using standard pgvector distance operators
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
Remplir à partir de tables synchronisées
Si vous chargez des intégrations depuis Unity Catalog plutôt que de les insérer directement, les tables synchronisées peuvent mapper une colonne d’intégration lakehouse directement vers une colonne Postgres vector lors de la synchronisation, au lieu du mappage JSONB par default. Voir Mappage de type personnalisé pour Lakebase Search.
Configurez l'index
Définissez build_mode lors de la création de l'index pour contrôler le compromis précision/vitesse :
standard(default) : équilibre le rappel et le temps de construction de l’index. À utiliser pour la plupart des charges de travail.quality: améliore le rappel mais prend plus de temps à construire.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');
Le mode de construction fast reste pris en charge pour des raisons de rétrocompatibilité.
By default, lakebase_ann choisit les listes en fonction des statistiques de la table et de la configuration de l’index. Définissez lists pour contrôler explicitement le layout de partition :
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (lists = '1000');
Créer des index simultanément
Utilisez CREATE INDEX CONCURRENTLY pour créer sans verrouiller la table, puis REINDEX CONCURRENTLY pour reconstruire sans interruption :
CREATE INDEX CONCURRENTLY items_embedding_ann ON items
USING lakebase_ann (embedding vector_l2_ops);
REINDEX INDEX CONCURRENTLY items_embedding_ann;
Ajuster la précision de la recherche
Avant le réglage, appelez lakebase_ann_index_info(index_name) pour obtenir les valeurs lists, default_probes et default_epsilon de l'index.
Utilisez lakebase_ann.probes au moment de la query pour contrôler le nombre de partitions IVF recherchées. Des valeurs plus élevées améliorent le rappel au détriment de la vitesse de la query. La default est 'auto'. Testez différentes valeurs pour atteindre votre objectif de rappel.
La forme de probes doit correspondre à la forme de lists. Appelez lakebase_ann_index_info pour trouver votre tableau lists, puis définissez une valeur pour un index à un niveau ou deux valeurs séparées par des virgules pour un index à deux niveaux :
|
|
|---|---|
|
|
|
|
|
|
Sur un petit dataset, lakebase_ann utilise une recherche exacte (plate) au lieu du partitionnement IVF, et lakebase_ann_index_info renvoie des lists et default_probes vides. Dans ce cas, laissez probes défini sur ''. Lorsque lists n’est pas vide, une valeur probes dont la forme ne correspond pas à lists provoque une erreur.
-- Check your index's lists array first
SELECT lakebase_ann_index_info('items_embedding_ann');
-- Then set probes to match the shape of lists.
-- One-level index (single-value lists): set one value.
SET lakebase_ann.probes TO '10';
-- Two-level index: set two ascending comma-separated values, for example '10, 20'.
-- Flat index (empty lists): leave probes set to ''.
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;
lakebase_ann.epsilon contrôle le nombre de candidats réorganisés à l’aide de distances en précision totale. Des valeurs plus élevées permettent de réorganiser davantage de candidats et prennent plus de temps. La valeur default de 'auto' convient à la plupart des charges de travail. Lors d’une recherche à plat sur un petit dataset, epsilon contrôle toujours la réorganisation en précision totale.
Préfiltre
By default, Postgres applique des conditions de filtrage non vectorielles après que l'index ANN a renvoyé les lignes candidates. Activez lakebase_ann.prefilter pour évaluer ces conditions avant le reclassement par distance en précision totale :
SET lakebase_ann.prefilter TO on;
SELECT * FROM items
WHERE id % 100 = 0
ORDER BY embedding <-> '[3,1,2]'
LIMIT 10;
Le préfiltrage est plus efficace lorsque le filtre est peu coûteux à évaluer et supprime la plupart des lignes. Désactivez-le pour les filtres qui correspondent à un grand nombre de lignes ou qui nécessitent des calculs coûteux, car l’évaluation du filtre au sein de l’index peut ajouter une surcharge.
Classes d'opérateurs
Métrique de distance | Classe d'opérateur | Opérateur de query |
|---|---|---|
L2 (euclidien) |
|
|
Produit interne négatif |
|
|
Similarité cosinus |
|
|
Choisissez la classe d’opérateur qui correspond à la façon dont vos intégrations ont été entraînées, et utilisez la même métrique pour l’index et la query :
vector_cosine_ops(<=>) est la similarité cosinus. Utilisez-le pour la plupart des intégrations de texte. C'est le choix le plus courant.vector_l2_ops(<->) est la distance euclidienne (L2). Utilisez-le lorsque la distance spatiale absolue importe et que les vecteurs ne sont pas normalisés.vector_ip_ops(<#>) est un produit interne négatif. Utilisez-le lorsque les vecteurs sont pré-normalisés à une longueur unitaire. Pour les vecteurs unitaires, le produit interne est égal à la similarité cosinus et est généralement plus rapide.
Référence des options d'index
Option | Type | Par défaut | Description |
|---|---|---|---|
| chaîne |
| Contrôle le compromis entre précision et vitesse. Utilisez |
| chaîne |
| Définit le layout de partition IVF. Avec |
Référence GUC
parameter | Type | Par défaut | Description |
|---|---|---|---|
| chaîne |
| Nombre de partitions IVF à analyser à chaque niveau. Des valeurs plus élevées améliorent le rappel au détriment de la vitesse de la query. La forme doit correspondre au tableau |
| chaîne |
| Contrôle le nombre de candidats réorganisés à l’aide de distances en précision totale. Des valeurs plus élevées permettent de réorganiser davantage de candidats et prennent plus de temps. |
| énumération |
| Évalue les filtres non vectoriels avant la réorganisation par distance en précision totale. Les valeurs valides sont |
Fonctions utilitaires
Fonction | Renvoie | Description |
|---|---|---|
| vide | Charge un index en mémoire pour éliminer la latence de démarrage à cold-start lors de la première query. |
| Texte | Renvoie les métadonnées d'index sous forme de texte, notamment |