Cette page décrit les bonnes pratiques d'indexation vectorielle qui optimisent vos index vectoriels et améliorent les résultats des requêtes de voisin le plus proche approximatif (ANN).
Régler les options de recherche vectorielle
Les valeurs les plus optimales pour les options de votre index vectoriel dépendent de votre cas d'utilisation, de votre ensemble de données vectorielles et des vecteurs de requête. Vous pouvez définir et ajuster ces valeurs en créant un index vectoriel et en définissant index_option_list
dans l'instruction CREATE VECTOR INDEX
. Vous devrez peut-être effectuer un réglage itératif pour trouver les meilleures valeurs pour votre charge de travail spécifique.
Voici quelques consignes utiles à suivre pour choisir les valeurs appropriées :
tree_depth
(niveau d'arbre) : si la table que vous indexez comporte moins de 10 millions de lignes, utilisez untree_depth
de2
. Sinon, untree_depth
de3
accepte les tables comportant jusqu'à environ 10 milliards de lignes.num_leaves
: utilisez la racine carrée du nombre de lignes dans l'ensemble de données. Une valeur plus élevée peut augmenter le temps de création de l'index vectoriel. Évitez de définirnum_leaves
sur une valeur supérieure àtable_row_count
divisé par 1 000, car cela entraîne des feuilles trop petites et de mauvaises performances.num_leaves_to_search
: cette option spécifie le nombre de nœuds feuilles de l'index à rechercher. L'augmentation denum_leaves_to_search
améliore le rappel, mais augmente également la latence et les coûts. Nous vous recommandons d'utiliser une valeurnum_leaves_to_search
égale à 1 % du nombre total de feuilles défini dans l'instructionCREATE VECTOR INDEX
. Si vous utilisez une clause de filtre, augmentez cette valeur pour élargir la recherche.
Si vous obtenez un rappel acceptable, mais que le coût des requêtes est trop élevé, ce qui entraîne un faible nombre maximal de requêtes par seconde, essayez d'augmenter num_leaves
en suivant ces étapes :
- Définissez
num_leaves
sur un multiple k de sa valeur d'origine (par exemple,2 * sqrt(table_row_count)
). - Définissez
num_leaves_to_search
sur le même multiple k de sa valeur d'origine. - Essayez de réduire
num_leaves_to_search
pour améliorer le coût et les RPS tout en conservant le rappel.
Améliorer le rappel
Pour améliorer le rappel, envisagez d'ajuster la valeur num_leaves_to_search
ou de reconstruire votre index vectoriel.
Augmenter la valeur num_leaves_to_search
Si la valeur num_leaves_to_search
est trop petite, vous aurez peut-être plus de mal à trouver les voisins les plus proches pour certains vecteurs de requête. Créer un index vectoriel avec une valeur num_leaves_to_search
plus élevée peut aider à améliorer le rappel en recherchant davantage de feuilles. Les requêtes récentes peuvent contenir davantage de ces vecteurs complexes.
Recompiler l'index vectoriel
La structure arborescente de l'index vectoriel est optimisée pour l'ensemble de données au moment de la création et reste statique par la suite. Par conséquent, si des vecteurs très différents sont ajoutés après la création de l'index vectoriel initial, la structure arborescente peut être sous-optimale, ce qui entraîne un rappel moins performant.
Pour reconstruire votre index vectoriel sans temps d'arrêt :
- Créez un index vectoriel sur la même colonne d'embedding que l'index vectoriel actuel, en mettant à jour les paramètres (par exemple,
OPTIONS
) selon vos besoins. - Une fois l'index créé, utilisez l'indication
FORCE_INDEX
pour pointer vers le nouvel index afin de mettre à jour la requête de recherche vectorielle. afin que la requête utilise le nouvel index de vecteur. Vous devrez peut-être également réajusternum_leaves_to_search
dans votre nouvelle requête. - Supprimez l'index vectoriel obsolète.
Étapes suivantes
En savoir plus sur les index vectoriels Spanner
En savoir plus sur les plus proches voisins approximatifs de Spanner
En savoir plus sur les fonctions GoogleSQL
APPROXIMATE_COSINE_DISTANCE()
,APPROXIMATE_EUCLIDEAN_DISTANCE()
etAPPROXIMATE_DOT_PRODUCT()
En savoir plus sur les instructions
VECTOR INDEX
GoogleSQL