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 recherche des plus proches voisins approximatifs (ANN).
Ajuster les options de recherche vectorielle
Les valeurs les plus optimales pour vos options d'index vectoriel dépendent de votre cas d'utilisation, de votre ensemble de données vectorielles et de vos 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 conseils utiles à suivre lorsque vous choisissez des valeurs appropriées :
tree_depth(niveau de l'arborescence) : si la table que vous indexez comporte moins de 10 millions de lignes, utilisez unetree_depthde2. Sinon, unetree_depthde3est compatible avec les tables contenant jusqu'à environ 10 milliards de lignes.num_leaves: utilisez la racine carrée du nombre de lignes de l'ensemble de données. Une valeur plus élevée peut augmenter la durée de la compilation de l'index vectoriel. Évitez de définirnum_leavessur une valeur supérieure àtable_row_countdivisé par 1 000, car cela entraîne des feuilles trop petites et des performances médiocres.num_leaves_to_search: cette option spécifie le nombre de nœuds feuilles de l'index à rechercher. L'augmentation denum_leaves_to_searchaméliore le rappel, mais augmente également la latence et le coût. Nous vous recommandons d'utiliser un nombre correspondant à 1% du nombre total de feuilles défini dans l'instructionCREATE VECTOR INDEXcomme valeur pournum_leaves_to_search. Si vous utilisez une clause de filtre, augmentez cette valeur pour élargir la recherche.
Si un rappel acceptable est obtenu, mais que le coût de la requête est trop élevé, ce qui entraîne un faible nombre maximal de requêtes par seconde, essayez d'augmenter num_leaves en procédant comme suit :
- Définissez
num_leavessur un multiple k de sa valeur d'origine (par exemple,2 * sqrt(table_row_count)). - Définissez
num_leaves_to_searchsur le même multiple k de sa valeur d'origine. - Essayez de réduire
num_leaves_to_searchpour améliorer le coût et le 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 recréer 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. La création d'un index vectoriel avec une valeur num_leaves_to_search plus élevée peut améliorer le rappel en recherchant davantage de feuilles. Les requêtes récentes peuvent contenir davantage de ces vecteurs difficiles.
Recréer 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 plus faible.
Pour recréer 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 la création de l'index terminée, vous pouvez évaluer lequel de vos deux index est le plus performant. Si c'est le cas, passez à l'étape suivante. Sinon, passez à la suppression de l'index vectoriel obsolète. Spanner décide automatiquement quel index utiliser lors de l'exécution de la requête. Spanner vous permet de spécifier l'index à utiliser de deux manières. Sélectionnez l'une des méthodes suivantes pour évaluer et comparer vos index :
a. Modifiez votre application : vous pouvez mettre à jour un sous-ensemble de vos requêtes afin qu'elles utilisent l'
FORCE_INDEXindication pour pointer vers le nouvel index afin de mettre à jour la requête de recherche vectorielle. Cela garantit que la requête utilise le nouvel index vectoriel. Avec cette méthode, vous devrez peut-être réajusternum_leaves_to_searchdans votre nouvelle requête.b. Modifiez votre schéma : vous pouvez définir l'option
disable_searchsur l'un de vos index vectoriels. Lorsque cette option est définie surtrue, Spanner désactive l'index vectoriel. Pour ce faire, exécutez l'instruction de modification de schémaALTER VECTOR INDEX:ALTER VECTOR INDEX IncidentVectorIndex SET OPTIONS (disable_search=true);Cette méthode empêche Spanner d'utiliser cet index vectoriel dans votre base de données. Si vous disposez de deux index et que vous définissez cette option sur l'index le plus ancien, toutes les requêtes utilisent le nouvel index une fois la modification du schéma appliquée. Si vous utilisez l'indication
FORCE_INDEXpour spécifier un index vectoriel dont l'optiondisable_searchest définie surtrue, la requête échoue.Supprimez l'index vectoriel obsolète.
Étape suivante
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(),APPROXIMATE_DOT_PRODUCT()En savoir plus sur les instructions GoogleSQL
VECTOR INDEX.