Partager via


Configurer un suggesteur pour l’autocomplétion et les correspondances suggérées dans une requête

Dans Recherche Azure AI, l’autocomplétion ou la recherche en cours de frappe est activée par le biais d’un suggesteur. Un suggesteur est une configuration dans un index spécifiant les champs à utiliser pour remplir l’autocomplétion et les suggestions. Ces champs sont soumis à une tokenisation supplémentaire, générant des séquences de préfixe pour prendre en charge les correspondances sur des termes partiels. Par exemple, un suggesteur qui comprend un champ Ville avec une valeur pour « Seattle » aura des combinaisons de préfixe « sea », « seat », « seatt » et « seattl » pour prendre en charge l’autocomplétion.

Les correspondances sur des termes partiels peuvent être une requête autocomplétée ou une correspondance suggérée. Le même suggesteur prend en charge les deux expériences.

L’autocomplétion se présente sous deux formes : l’autocomplétion, qui complète une entrée partielle pour une recherche sur un terme entier, ou des suggestions, qui invitent à cliquer sur une correspondance particulière. L’autocomplétion génère une requête. Les suggestions produisent un document correspondant.

La capture d’écran suivante illustre cet exemple. L’autocomplétion anticipe un terme potentiel, en ajoutant « in » si vous avez tapé « tw ». Les suggestions sont des mini-résultats de recherche, où un champ comme Nom de l’hôtel représente un document de recherche d’hôtels correspondants à partir de l’index. Concernant les suggestions, vous pouvez couvrir n’importe quel champ fournissant des informations descriptives.

Comparaison visuelle des requêtes de saisie semi-automatique et suggérées

Vous pouvez utiliser ces fonctionnalités séparément ou ensemble. Pour implémenter ces comportements dans Recherche Azure AI, il existe un composant de requête et d’index.

  • Ajoutez un suggesteur à une définition d’index de recherche. La suite de cet article se concentre sur la création d’un suggesteur.

  • Appelez une requête activée par un suggesteur, sous la forme d’une requête Suggestion ou Autocomplétion, en utilisant l’une des API répertoriées dans une section ultérieure.

L’expérience de recherche lors de la frappe est activée par champ pour des champs de chaînes. Vous pouvez implémenter les deux comportements prédictifs dans la même solution de recherche si vous souhaitez une expérience similaire à celle indiquée dans la capture d’écran. Les deux requêtes ciblent la collection de documents d’un index spécifique, et les réponses sont renvoyées après qu’un utilisateur a saisi une chaîne d’entrée de trois caractères minimum.

Comment créer un suggesteur

Pour créer un suggesteur, ajoutez-en un à une définition d’index. Un suggesteur prend un nom et une collection de champs sur lesquels l’expérience d’autocomplétion est activée. Le meilleur moment pour créer un suggesteur est lorsque vous définissez également le champ qui l’utilise.

  • Utilisez uniquement des champs de chaîne.

  • Si le champ de chaîne fait partie d’un type complexe, par exemple, un champ City (Ville) dans Address (Adresse), incluez le parent dans le chemin du champ : "Address/City" (REST, C# et Python), ou ["Address"]["City"] (JavaScript).

  • Utilisez l’analyseur Lucene standard par défaut ("analyzer": null) ou un analyseur de langage (par exemple, "analyzer": "en.Microsoft") sur le champ.

L'API ne vous autorise pas à créer un suggesteur à l’aide de champs préexistants. Des préfixes sont générés pendant l’indexation, lorsque des termes partiels combinant deux caractères ou plus sont tokenisés avec des termes entiers. Les champs existants étant déjà tokenisés, vous devez recréer l’index pour les ajouter à un suggesteur. Pour plus d’informations, consultez Comment régénérer un index Recherche Azure AI.

Choisir des champs

Bien qu’un suggesteur possède plusieurs propriétés, il se compose principalement d’une collection de champs de chaîne pour lesquels vous activez une expérience « search-as-you-type ». Il existe un suggesteur pour chaque index ; la liste des suggesteurs doit donc inclure tous les champs qui contribuent au contenu des suggestions et de l’autocomplétion.

L’autocomplétion bénéficie d’un plus grand nombre de champs à exploiter, car le contenu supplémentaire a un potentiel d’achèvement des termes plus important.

En revanche, les suggestions produisent de meilleurs résultats lorsque votre choix de champ est sélectif. N’oubliez pas que la suggestion est un proxy pour un document de recherche. Sélectionnez donc les champs qui représentent le mieux un résultat unique. Les noms, titres ou autres champs uniques qui font la distinction entre plusieurs correspondances fonctionnent le mieux. Si les champs sont constitués de valeurs répétitives, les suggestions consistent en des résultats identiques, et l’utilisateur ne saura pas laquelle choisir.

Pour convenir aux deux expériences de recherche lors de la frappe, ajoutez tous les champs dont vous avez besoin pour l’autocomplétion, mais utilisez select, top, filter et searchFields pour contrôler les résultats des suggestions.

Choisir des analyseurs

L’analyseur choisi détermine la façon dont les champs sont tokenisés et préfixés. Par exemple, pour une chaîne avec trait d’union comme « context-sensitive », l’utilisation d’un analyseur de langage entraînera les combinaisons de jetons suivantes : « context », « sensitive » et « context-sensitive ». Si vous aviez utilisé l’analyseur Lucene standard, la chaîne avec trait d’union n’existerait pas.

Lors de l’évaluation des analyseurs, envisagez d’utiliser l’API d’analyse de texte pour savoir comment les termes sont traités. Une fois que vous avez créé un index, vous pouvez essayer divers analyseurs sur une chaîne pour afficher la sortie du jeton.

Les champs qui utilisent des analyseurs personnalisés ou des analyseurs intégrés (à l’exception de Lucene standard) sont explicitement interdits pour éviter des résultats médiocres.

Remarque

Si vous avez besoin de contourner la contrainte de l’analyseur, par exemple, si vous avez besoin d’un analyseur de mot clé ou de ngram pour certains scénarios de requête, vous devez utiliser deux champs distincts pour le même contenu. Ceci permettra à l’un des champs d’avoir un suggesteur et à l'autre d'être configuré avec une configuration d’analyseur personnalisée.

Créer à l’aide du portail

Lorsque vous utilisez l’Assistant Ajouter un index ou Importer des données pour créer un index, vous avez la possibilité d’activer un suggesteur :

  1. Dans la définition de l’index, entrez un nom pour le suggesteur.

  2. Dans chaque définition de nouveau champ, activez une case à cocher dans la colonne Suggesteur. Une case à cocher est disponible uniquement sur les champs de chaîne.

Comme indiqué précédemment, le choix de l’analyseur a un impact sur la segmentation du texte en unités lexicales et en préfixes. Tenez compte de l’ensemble de la définition du champ lors de l’activation des suggesteurs.

Créer à l’aide de REST

Dans l’API REST, ajoutez des suggesteurs via Créer un index ou Mettre à jour l’index.

{
  "name": "hotels-sample-index",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

Créer à l’aide de .NET

En C#, définissez un objet SearchSuggester. Suggesters est une collection sur un objet SearchIndex, mais elle ne peut recevoir qu’un seul élément. Ajoutez un suggesteur à une définition d’index.

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

Informations de référence sur les propriétés

Propriété Description
name Spécifiée dans la définition de suggesteur, mais également appelée sur une requête Autocomplétion ou Suggestions.
sourceFields Spécifiée dans la définition de suggesteur. Il s’agit d’une liste d’un ou plusieurs champs de l’index qui sont la source du contenu pour des suggestions. Les champs doivent être de type Edm.String. Tout analyseur spécifié dans le champ doit correspondre à un analyseur lexical nommé issu de cette liste (et non à un analyseur personnalisé).

Il vous est conseillé de spécifier uniquement les champs qui se prêtent à une réponse attendue et appropriée, qu’il s’agisse d’une chaîne complète dans une barre de recherche ou d’une liste déroulante.

Un nom d’hôtel est un bon candidat, car il est précis. Les champs détaillés tels que des descriptions et des commentaires sont trop denses. De même, les champs répétitifs, tels que les balises et les catégories sont moins efficaces. Dans les exemples, nous incluons tout de même « catégorie » pour montrer que vous pouvez inclure plusieurs champs.
searchMode Paramètre REST uniquement, mais également visible dans le portail. Ce paramètre n’est pas disponible dans le Kit de développement logiciel (SDK) .NET. Il indique la stratégie utilisée pour rechercher des expressions candidates. Le seul mode actuellement pris en charge est analyzingInfixMatching, qui établit actuellement une correspondance au début d’un terme.

Utiliser un suggesteur

Un suggesteur est utilisé dans une requête. Après la création d’un suggesteur, appelez l’une des API suivantes pour tester une expérience « search-as-you-type » :

Dans une application de recherche, le code client doit utiliser une bibliothèque comme jQuery UI Autocomplete pour collecter la requête partielle et fournir la correspondance. Pour plus d’informations sur cette tâche, consultez Ajouter l’autocomplétion ou les résultats suggérés au code client.

L’utilisation de l’API est illustrée dans l’appel suivant de l’API REST Autocomplétion. Dans cet exemple, deux éléments importants sont à retenir. Tout d’abord, comme avec toutes les requêtes, l’opération est effectuée sur la collection de documents d’un index, et la requête inclut un paramètre search, qui, dans ce cas, fournit la requête partielle. Ensuite, vous devez ajouter suggesterName à la requête. Si un suggesteur n’est pas défini dans l’index, les appels à l’autocomplétion ou aux suggestions se solde par un échec.

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2024-07-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Exemple de code

Étapes suivantes

En savoir plus sur la formulation des requêtes