Bonnes pratiques pour l'indexation vectorielle

Cette page décrit les bonnes pratiques d'indexation vectorielle qui optimisent vos index vectoriels et améliorent les résultats des requêtes ANN (voisin le plus proche approximatif).

Régler 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 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 de l'arborescence) : si la table que vous indexez comporte moins de 10 millions de lignes, utilisez un tree_depth de 2. Sinon, un tree_depth de 3 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éfinir num_leaves comme étant supérieur à 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 indique le nombre de nœuds feuilles de l'index à rechercher. L'augmentation de num_leaves_to_search améliore le rappel, mais augmente également la latence et les coûts. Nous vous recommandons d'utiliser une valeur num_leaves_to_search égale à 1 % du nombre total de feuilles défini dans l'instruction CREATE 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 :

  1. Définissez num_leaves sur un multiple k de sa valeur d'origine (par exemple, 2 * sqrt(table_row_count)).
  2. Définissez num_leaves_to_search sur le même multiple k de sa valeur d'origine.
  3. 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.

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 plus 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 recompiler votre index vectoriel sans temps d'arrêt :

  1. 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.
  2. Spanner décide automatiquement de l'index à utiliser lors de l'exécution de la requête. Spanner propose deux méthodes pour spécifier l'index à utiliser. Choisissez 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'indication FORCE_INDEX pour pointer vers le nouvel index et mettre à jour la requête de recherche vectorielle. Cela garantit que la requête utilise le nouvel index de vecteur. Avec cette méthode, vous devrez peut-être réajuster num_leaves_to_search dans votre nouvelle requête.

    b. Modifier votre schéma : vous pouvez définir l'option disable_search sur l'un de vos index vectoriels. Lorsque ce paramètre est défini sur true, Spanner désactive l'index vectoriel. Pour ce faire, exécutez l'instruction de modification du schéma ALTER 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 avez deux index et que vous définissez cette option sur l'index le plus ancien, toutes les requêtes utiliseront le nouvel index une fois la modification du schéma appliquée. Si vous utilisez l'indication FORCE_INDEX pour spécifier un index vectoriel dont l'option disable_search est définie sur true, la requête échoue.

  3. Supprimez l'index vectoriel obsolète.

Étape suivante