Ajouter des synonymes dans Recherche Azure AI
Sur un service de recherche, une carte de synonymes associe des termes équivalents, ce qui élargit l’étendue d’une requête, sans que l’utilisateur ait à fournir le terme. Par exemple, en partant du principe que dog (chien), canine (canin) et puppy (chiot) sont mappés en tant que synonymes, une requête sur canine trouve un document contenant dog. Vous pouvez créer plusieurs cartes de synonymes pour différentes langues, telles que des versions en anglais et en français, ou des lexiques si votre contenu comprend du jargon technique, de l’argot ou une terminologie complexe.
Quelques points clés sur les cartes de synonymes :
- Une carte de synonymes est une ressource de niveau supérieur qui peut être créée une seule fois et utilisée par de nombreux index.
- Une carte de synonymes s’applique aux champs de chaîne.
- Vous pouvez créer et affecter une carte de synonymes à tout moment sans interruption de l’indexation ou des requêtes.
- Votre niveau de service définit les limites du nombre de cartes de synonymes que vous pouvez créer.
- Votre service de recherche peut contenir plusieurs cartes de synonymes, mais à l’intérieur d’un index, une définition de champ ne peut avoir qu’une seule attribution de carte de synonymes.
Créer une carte de synonymes
Une carte de synonymes se compose de noms, de formats et de règles qui fonctionnent comme des entrées de carte de synonymes. Le seul format pris en charge est solr
, et le format de solr
détermine la construction des règles.
Pour créer une carte de synonymes, procédez par programmation. Le portail Azure ne prend pas en charge les définitions de carte de synonymes.
Utilisez l’API REST Create Synonym Map pour créer une carte de synonymes.
POST /synonymmaps?api-version=2024-07-01
{
"name": "geo-synonyms",
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
Washington, Wash., WA => WA\n"
}
Définir des règles
Les règles de mappage respectent la spécification de filtre de synonyme open source d’Apache Solr, décrite dans ce document : SynonymGraphFilter. Le format solr
prend en charge deux types de règles :
équivalence (où les termes sont des substituts égaux dans la requête)
mappages explicites (où les termes sont mappés à un terme explicite)
Chaque règle doit être délimitée par le caractère de nouvelle ligne (\n
). Vous pouvez définir jusqu'à 5 000 règles par carte de synonymes dans un service gratuit et 20 000 règles par carte dans les autres références tierces. Chaque règle peut comporter jusqu’à 20 éléments qui étendent cette règle. Pour plus d’informations, consultez Limites des synonymes.
Les analyseurs de requête mettent automatiquement en minuscules les termes majuscules ou mixtes. Pour conserver des caractères spéciaux dans la chaîne, tels qu’une virgule ou un tiret, ajoutez les caractères d’échappement appropriés lors de la création de la carte de synonymes.
Règles d’équivalence
Les règles pour des termes équivalents sont délimitées par des virgules dans la même règle. Dans le premier exemple, une requête sur USA s’étend à USA OR "United States" OR "United States of America". Notez que si vous souhaitez faire correspondre deux expressions, la requête elle-même doit être une requête d’expression entre guillemets.
Dans le cas d’équivalence, une requête sur dog étend la requête pour inclure également puppy et canine.
{
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
dog, puppy, canine\n
coffee, latte, cup of joe, java\n"
}
Mappage explicite
Les règles d’un mappage explicite sont dénotées par une flèche =>
. Lorsqu’elle spécifiée, une séquence de termes d’une requête de recherche qui correspond à la partie gauche de =>
est remplacée par les alternatives sur la partie droite au moment de la requête.
Dans le cas explicite, une requête sur Washington, Wash. ou WA est réécrite comme WA, et le moteur de requête recherche uniquement des correspondances avec le terme WA. Le mappage explicite s’applique uniquement dans la direction spécifiée et ne réécrit pas la requête en remplaçant WA par Washington dans ce cas.
{
"format": "solr",
"synonyms": "
Washington, Wash., WA => WA\n
California, Calif., CA => CA\n"
}
Échappement des caractères spéciaux
Les synonymes sont analysés durant le traitement de la requête comme tout autre terme de requête, ce qui signifie que les règles relatives aux caractères réservés et aux caractères spéciaux s’appliquent aux termes de votre carte de synonymes. La liste des caractères nécessitant un échappement varie entre la syntaxe simple et la syntaxe complète :
- syntaxe simple
+ | " ( ) ' \
- syntaxe complète
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /
Pour conserver les caractères ignorés par l’analyseur par défaut, remplacez celui-ci par un analyseur qui les conserve. Parmi les choix possibles figurent les analyseurs de langage naturel de Microsoft, qui conservent les mots avec trait d'union, ou un analyseur personnalisé pour les modèles plus complexes. Pour plus d'informations, consultez Termes partiels, modèles et caractères spéciaux.
L’exemple suivant montre comment placer un caractère dans une séquence d’échappement à l’aide d’une barre oblique inverse :
{
"format": "solr",
"synonyms": "WA\, USA, WA, Washington\n"
}
Étant donné que la barre oblique inverse est elle-même un caractère spécial dans d’autres langages tels que JSON et C#, vous devrez probablement effectuer un double échappement. Voici un exemple en JSON :
{
"format":"solr",
"synonyms": "WA\\, USA, WA, Washington"
}
Gérer les cartes de synonymes
Vous pouvez mettre à jour une carte de synonymes sans perturber les charges de travail de requête et d’indexation. Toutefois, si vous ajoutez un mappage de synonymes à un champ et que vous supprimez ce mappage par la suite, toute requête comprenant les champs en question échoue avec une erreur 404.
La création, la mise à jour et la suppression d’une carte de synonymes est toujours une opération sur le document entier. Vous ne pouvez pas mettre à jour ou supprimer des parties de la carte de synonymes de manière incrémentielle. Même la mise à jour d’une seule règle nécessite un rechargement.
Assigner des synonymes à des champs
Après avoir créé la carte de synonymes, affectez-la à un champ dans votre index. Pour affecter des cartes de synonymes, procédez par programmation. Le portail Azure ne prend pas en charge les associations de champs de carte de synonymes.
- Un champ doit être de type
Edm.String
ouCollection(Edm.String)
- Un champ doit avoir
"searchable":true
- Un champ ne peut avoir qu’une seule carte de synonymes
Si la carte de synonymes existe sur le service de recherche, elle est utilisée sur la requête suivante, sans réindexation ni reconstruction requise.
Utilisez l’API REST Create or Update Index pour modifier une définition de champ.
PUT /indexes?api-version=2024-07-01
{
"name":"hotels-sample-index",
"fields":[
{
"name":"description",
"type":"Edm.String",
"searchable":true,
"synonymMaps":[
"en-synonyms"
]
},
{
"name":"description_fr",
"type":"Edm.String",
"searchable":true,
"analyzer":"fr.microsoft",
"synonymMaps":[
"fr-synonyms"
]
}
]
}
Requête sur des champs équivalents ou mappés
Une attribution de champ de synonyme ne change pas la façon dont vous écrivez des requêtes. Après l’attribution de la carte de synonymes, la seule différence est que, si un terme de requête existe dans la carte de synonymes, le moteur de recherche développe ou réécrit le terme ou l’expression, en fonction de la règle.
Utilisation des synonymes durant l’exécution de la requête
Les synonymes sont une technique d’extension de requête qui complète le contenu d’un index avec des termes équivalents, mais uniquement pour des champs ayant une attribution de synonyme. Si une requête sur des champs exclut un champ avec synonyme, vous ne verrez pas de correspondances de la carte de synonymes.
Pour des champs avec synonymes, les synonymes sont soumis à la même analyse de texte que le champ associé. Par exemple, si un champ est analysé à l’aide de l’analyseur Lucene standard, les termes synonymes sont également soumis à l’analyseur Lucene standard au moment de la requête. Si vous souhaitez conserver les signes de ponctuation, tels que des points ou des tirets, dans le terme synonyme, appliquez un analyseur de préservation du contenu sur le champ.
En interne, la fonctionnalité de synonymes réécrit la requête d’origine avec des synonymes en utilisant l’opérateur OR. Pour cette raison, la mise en surbrillance des correspondances et les profils de score traitent les synonymes et le terme d’origine comme équivalents.
Les synonymes s’appliquent uniquement aux requêtes de texte de forme libre, et ne sont pas pris en charge pour les filtres, les facettes, la saisie semi-automatique ou les suggestions. L’autocomplétion et les suggestions sont basées uniquement sur le terme d’origine : les correspondances de synonymes n’apparaissent pas dans la réponse.
Si vous avez un index existant dans un environnement de déploiement (non production), faites des essais avec un petit dictionnaire pour voir comment l’ajout de synonymes modifie l’expérience de recherche, notamment son impact sur les profils de score, la mise en surbrillance des correspondances et les suggestions.
Recherches avec des caractères génériques
Les expansions de synonymes ne s’appliquent pas aux termes de recherche génériques : les préfixes, correspondances partielles et expressions régulières ne sont pas développés.
Si vous devez faire une requête unique qui applique l’expansion de synonymes et des recherches avec des caractères génériques, des expressions régulières ou une correspondance approximative, vous pouvez combiner les requêtes avec la syntaxe d’OR. Par exemple, pour combiner des synonymes avec des caractères génériques pour une syntaxe de requête simple, le terme serait <query> | <query>*
.