Supprimer et regénérer un index dans la Recherche Azure AI

Cet article décrit comment supprimer et regénérer un index de Recherche Azure AI. Il décrit les circonstances dans lesquelles les reconstructions sont nécessaires et fournit des recommandations pour atténuer les effets des reconstructions sur les demandes de requête en cours. Si vous devez souvent faire des regénérations, nous vous recommandons d’utiliser des alias d’index pour faciliter le remplacement de l’index vers lequel pointe votre application.

Pendant le développement actif, il est courant de supprimer et regénérer des index quand vous itérez sur une conception d’index. La plupart des développeurs utilisent un petit échantillon représentatif de leurs données pour accélérer la réindexation.

Modifications nécessitant une regénération

Le tableau suivant liste les modifications qui nécessitent une suppression et une reconstruction d’index.

Action Description
Supprimer un champ Pour supprimer physiquement toutes les traces d’un champ, vous devez regénerer l’index. Quand une reconstruction immédiate n’est pas pratique, vous pouvez modifier le code de l’application pour rediriger l’accès hors d’un champ obsolète ou utiliser les paramètres de requête searchFields et select pour choisir les champs à rechercher et à retourner. Physiquement, le contenu et la définition du champ restent dans l’index jusqu’à la régénération suivante, lors de laquelle est appliqué un schéma omettant le champ en question.
Modifier une définition de champ Les révisions apportées à un nom de champ, à un type de données ou à des attributs d’index spécifiques (searchable, filterable, sortable, facetable) exigent une reconstruction complète.
Affecter un analyseur à un champ Des analyseurs sont définis dans un index, affectés aux champs, puis appelés pendant l’indexation pour indiquer le mode de création des jetons. Vous pouvez à tout moment ajouter une nouvelle définition d’analyseur à un index, mais il n’est possible d’affecter l’analyseur qu’à la création du champ. Cette condition s’applique à la fois à la propriété analyzer et à la propriété indexAnalyzer. La propriété searchAnalyzer fait figure d’exception (elle peut être affectée à un champ existant).
Mettre à jour ou supprimer une définition d’analyseur dans un index Vous ne pouvez pas supprimer ou changer une configuration d’analyseur existante (analyseur, générateur de jetons, filtre de jetons ou filtre de caractères) dans l’index, à moins de regénérer la totalité de l’index.
Ajouter un champ à un suggesteur Si un champ existe déjà et que vous souhaitez l’ajouter à une construction Suggesters, reconstruisez l’index.
Changer de niveau Les mises à niveau sur place ne sont pas prises en charge. Si vous avez besoin de plus de capacité, créez un service et reconstruisez vos index à partir de zéro. Pour faciliter l’automatisation de ce processus, vous pouvez utiliser l’exemple de code index-backup-restore dans ce dépôt d’exemples .NET de Recherche Azure AI. Cette application va sauvegarder votre index dans une série de fichiers JSON, puis recréer l’index dans un service de recherche que vous spécifiez.

Modifications sans exigence de regénération

Beaucoup d’autres modifications peuvent être effectuées sans impacter les structures physiques existantes. Plus précisément, les changements suivants n’exigent pas de regénération d’index. Pour ces changements, vous pouvez mettre à jour une définition d’index existante avec vos changements.

  • Ajouter un nouveau champ
  • Définir l’attribut retrievable sur un champ existant
  • Mettre à jour searchAnalyzer sur un champ qui a un indexAnalyzer existant
  • Ajouter une nouvelle définition d’analyseur dans un index (qui peut être appliqué aux nouveaux champs)
  • Ajouter, mettre à jour ou supprimer des profils de scoring
  • Ajouter, mettre à jour ou supprimer des paramètres CORS
  • Ajouter, mettre à jour ou supprimer des synonymMaps
  • Ajouter, mettre à jour ou supprimer des configurations sémantiques

Quand vous ajoutez un nouveau champ, les documents indexés existants reçoivent une valeur null pour le nouveau champ. Pendant l’actualisation des données par la suite, les valeurs provenant des données sources externes remplacent les valeurs null ajoutées par la Recherche Azure AI. Pour plus d’informations sur la mise à jour du contenu des index, consultez Ajouter, mettre à jour ou supprimer des documents.

Comment regénérer un index

Durant le développement, le schéma d’index change fréquemment. Anticipez cela en créant des index qui peuvent être rapidement supprimés, recréés et rechargés avec un petit jeu de données représentatif.

Pour les applications déjà en production, nous recommandons de créer un nouvel index qui s’exécute côte à côte avec un index existant pour éviter des temps d’arrêt dans les requêtes. Votre code d’application fournit la redirection vers le nouvel index.

  1. Vérifiez l’espace disponible. Les services de recherche sont soumis à nombre maximal d’index qui varie par niveau de service. Vérifiez que vous avez de la place pour un deuxième index.

  2. Déterminez si une regénération est nécessaire. Si vous ajoutez simplement des champs, ou que vous changez une partie de l’index qui n’est pas liée aux champs, il vous suffit de mettre à jour la définition sans supprimer, recréer ni recharger entièrement l’index.

  3. Obtenez une définition d’index pour vous y référer ultérieurement au besoin.

  4. Supprimez l’index existant, en supposant que vous n’exécutez pas le nouvel index et l’ancien index simultanément.

    Toutes les requêtes ciblant cet index sont immédiatement supprimées. Souvenez-vous que la suppression d’un index est irréversible, détruisant le stockage physique pour la collection de champs et d’autres constructions. Prenez le temps de réfléchir aux implications avant de supprimer l’index.

  5. Créez un index revu, où le corps de la requête contient les définitions des champs nouveaux ou modifiés.

  6. Chargez l’index avec des documents d’une source externe.

Quand vous créez l’index, du stockage physique est alloué pour chaque champ dans le schéma d’index, avec un index inversé créé pour chaque champ avec possibilité de recherche. Les champs non interrogeables peuvent être utilisés dans des filtres ou des expressions, mais ils n’ont pas d’index inversé et n’autorisent pas la recherche approximative ou en texte intégral. Lors d’une regénération d’index, ces index inversés sont supprimés et recréés sur la base du schéma d’index que vous fournissez.

Quand vous chargez l’index, l’index inversé de chaque champ est rempli avec tous les mots uniques tokenisés de chaque document, avec un mappage aux ID des documents correspondants. Par exemple, lors de l’indexation d’un jeu de données avec des hôtels, un index inversé créé pour un champ Ville peut contenir des termes pour Seattle, Portland, etc. L’ID des documents qui incluent « Seattle » ou « Portland » dans le champ Ville figure à côté du terme. Lors d’une opération Ajouter, mettre à jour ou supprimer, les termes et la liste des ID de document sont mis à jour en conséquence.

Équilibrage des charges de travail

L’indexation ne s’exécute pas en arrière-plan, mais le service de recherche équilibre les travaux d’indexation par rapport aux requêtes en cours. Pendant l’indexation, vous pouvez surveiller les demandes de requête dans le portail pour vous assurer que les demandes sont traitées en temps voulu.

Si les charges de travail d’indexation introduisent des niveaux de latence de requête inacceptables, effectuez une analyse des performances et passez en revue ces conseils sur les performances pour tenter d’atténuer le problème.

Rechercher les mises à jour

Vous pouvez commencer à interroger un index dès que le premier document est chargé. Si vous connaissez l’ID d’un document, l’API REST de recherche de document retourne le document spécifique. Pour un test plus large, attendez que l’index soit entièrement chargé, puis utilisez des requêtes pour vérifier le contexte que vous vous attendez à voir.

Vous pouvez utiliser l’Explorateur de recherche ou un client REST pour rechercher du contenu mis à jour.

Si vous avez ajouté ou renommé un champ, utilisez $select pour retourner ce champ : search=*&$select=document-id,my-new-field,some-old-field&$count=true.

Voir aussi