La recherche de similarité vectorielle, également appelée recherche des voisins les plus proches, dans AlloyDB pour PostgreSQL vous permet de trouver les lignes de votre base de données qui sont les plus similaires sur le plan sémantique à un vecteur de requête. Après avoir stocké et indexé les embeddings, vous pouvez utiliser les opérateurs pgvector et les fonctions de distance pour interroger votre base de données AlloyDB afin de trouver les voisins les plus proches.
Pour en savoir plus sur le stockage des embeddings vectoriels et la création d'un index, consultez Stocker des embeddings vectoriels et Créer des index respectivement.
Exécuter une recherche de similarité avec une entrée vectorielle
Pour exécuter une recherche de similarité, spécifiez la table, la colonne d'embedding, la fonction de distance, l'embedding cible et le nombre de lignes à afficher. Vous pouvez également utiliser la fonction embedding() pour traduire du texte en vecteur, puis comparer le vecteur aux embeddings stockés à l'aide des opérateurs pgvector.
Pour trouver les voisins sémantiques les plus proches d'un vecteur d'embedding, vous pouvez exécuter l'exemple de requête suivant, dans lequel vous définissez la même fonction de distance que celle utilisée lors de la création de l'index.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
LIMIT ROW_COUNT
Remplacez les éléments suivants :
TABLE: table contenant l'embedding auquel comparer le texte.EMBEDDING_COLUMN: colonne contenant les embeddings stockés.DISTANCE_FUNCTION_QUERY: fonction de distance à utiliser avec cette requête. Choisissez l'une des options suivantes, selon la fonction de distance utilisée lors de la création de l'index :Distance L2 :
<->Produit interne :
<#>Distance de cosinus :
<=>
EMBEDDING: vecteur d'embedding pour lequel vous souhaitez trouver les plus proches voisins sémantiques qui sont stockés.ROW_COUNT: nombre de lignes à afficher.Spécifiez
1si vous souhaitez n'obtenir que la meilleure correspondance.
Pour d'autres exemples de requêtes, consultez Effectuer des requêtes.
Exécuter une recherche de similarité à l'aide de pgvector avec une entrée textuelle
Vous pouvez également utiliser la fonction embedding() pour
traduire le texte en vecteur et rechercher les lignes de la base de données présentant les embeddings les plus approchants sur le plan sémantique. L'extension pgvector PostgreSQL standard est
personnalisée pour AlloyDB et est appelée vector. Vous appliquez
le vecteur à l'un des pgvector opérateurs correspondant aux plus proches voisins, par exemple
<=> pour la distance de cosinus.
Comme embedding() renvoie un tableau real, vous devez convertir explicitement l'appel
embedding() en type de données vector pour utiliser ces valeurs avec les opérateurs pgvector.
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
Remplacez les éléments suivants :
MODEL_ID: ID du modèle à interrogerSi vous utilisez le Model Garden, spécifiez
text-embedding-005comme ID de modèle. Il s'agit des modèles cloud qu' AlloyDB peut utiliser pour les embeddings textuels. Pour en savoir plus, consultez Embeddings textuels.- (Facultatif)
VERSION_TAG: tag de version du modèle à interroger. Ajoutez le préfixe@au tag.Si vous utilisez l'un des
text-embedding-005modèles anglais avec Gemini Enterprise Agent Platform, spécifiez l'un des tags de version, par exempletext-embedding-005, listés dans Versions de modèle.Google vous recommande vivement de toujours spécifier le tag de version. Si vous ne spécifiez pas le tag de version, AlloyDB utilise la dernière version du modèle, ce qui peut entraîner des résultats inattendus.
TABLE: table à interroger.EMBEDDING_COLUMN: colonne contenant les embeddings stockés.TEXT: texte à traduire en embedding vectoriel.ROW_COUNT: nombre de lignes à afficher.
Pour accélérer votre recherche KNN filtrée, vous pouvez utiliser le moteur de données en colonnes AlloyDB. Pour en savoir plus, consultez Accélérer votre recherche vectorielle filtrée (aperçu) et Configurer le moteur de données en colonnes.
Étape suivante
- Suivre le tutoriel sur la recherche vectorielle
- Régler les performances des requêtes vectorielles
- Métriques d'index vectoriel
- Découvrez comment créer un assistant d'achat intelligent avec AlloyDB, pgvector et la gestion des points de terminaison de modèle.
- En savoir plus sur la documentation de référence sur la gestion des points de terminaison de modèle.