Améliorer le classement d’un document avec l’optimisation des termes
La recherche fonctionne mieux lorsque les résultats les plus pertinents sont affichés en premier. Tous les moteurs de recherche essaient de retourner les résultats les plus pertinents pour les requêtes de recherche. Recherche Azure AI implémente une version améliorée d’Apache Lucene pour la recherche en texte intégral.
Ici, vous allez découvrir comment écrire des requêtes Lucene plus complexes. Vous allez ensuite améliorer la pertinence des résultats en optimisant les termes spécifiques dans votre requête de recherche.
Rechercher dans un index
Recherche Azure AI vous permet d’interroger un index à l’aide d’un point de terminaison REST ou à l’intérieur du portail Azure avec l’outil d’explorateur de recherche. Si vous souhaitez voir un récapitulatif rapide des étapes du traitement des requêtes, consultez l’unité Index de recherche dans Créer une solution Recherche Azure AI.
Dans cette unité, vous allez vous concentrer sur l’analyse des requêtes.
Vous utilisez l’explorateur de recherche pour voir la différence entre l’utilisation du type de requête simple et complet, et comprendre l’effet sur vos résultats de recherche.
Remarque
Si vous souhaitez exécuter les requêtes vous-même, vous avez besoin d’un abonnement Azure. Créez un service Recherche Azure AI et importez les données de l’exemple des hôtels dans un index.
Écrire une requête simple
Les exemples de données d’hôtel contiennent 50 hôtels avec des descriptions, des informations sur les chambres et leurs emplacements. Imaginez que vous gérez une entreprise de réservation d’hôtel et que vous disposez d’une application avec laquelle les utilisateurs peuvent réserver des hôtels. Les utilisateurs peuvent effectuer des recherches et les hôtels les plus pertinents doivent s’afficher en premier.
Vous rencontrez un cas d’usage où un client essaie de trouver un hôtel de luxe. Commencez par examiner les résultats de la recherche à partir de cette requête simple :
search=luxury&$select=HotelId, HotelName, Category, Tags, Description&$count=true
Les analyses de requête recherchent le terme luxury
dans tous les champs d’un document dans l’index.
La chaîne de requête limite également les champs retournés à partir de documents en ajoutant l’option select
.
&$select=HotelId, HotelName, Category, Tags, Description
Le dernier paramètre de la requête demande à l’index de compter le total des résultats.
$count=true
Comme aucune analyse lexicale n’est nécessaire, la récupération des documents retourne 14 documents. Les trois premiers sont les suivants :
{
"@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
"@odata.count": 14,
"value": [
{
"@search.score": 2.633778,
"HotelId": "13",
"HotelName": "Historic Lion Resort",
"Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort",
"Category": "Budget",
"Tags": [
"view",
"free wifi",
"free wifi"
]
},
{
"@search.score": 2.1104424,
"HotelId": "18",
"HotelName": "Oceanside Resort",
"Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
"Category": "Budget",
"Tags": [
"view",
"laundry service",
"air conditioning"
]
},
{
"@search.score": 1.966516,
"HotelId": "40",
"HotelName": "Trails End Motel",
"Description": "Only 8 miles from Downtown. On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
"Category": "Luxury",
"Tags": [
"continental breakfast",
"view",
"view"
]
},
...
]
}
Le client peut être surpris que le premier hôtel qui est censé être un hôtel de luxe est dans la catégorie Petit budget et n’a pas de climatisation. Si le client entre plusieurs mots dans sa recherche, votre application part du principe que tous les termes doivent figurer dans les résultats, de sorte qu’il ajoute + entre les termes à la requête. La requête envoyée à l’API est la suivante :
search=luxury + air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true
Le service de recherche renvoie maintenant cinq documents, mais les résultats les plus importants figurent dans la catégorie de budget.
Activer l’analyseur de requête Lucene
Vous pouvez indiquer à l’explorateur de recherche d’utiliser l’analyseur de requête Lucene en ajoutant &queryType=full
à la chaîne de requête.
search=luxury AND air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
Avec la syntaxe Lucene, vous pouvez écrire des requêtes plus précises. Voici un résumé des fonctionnalités disponibles :
- Opérateurs booléens :
AND
,OR
,NOT
par exempleluxury AND 'air con'
. - Recherche par champ :
fieldName:search term
par exempleDescription:luxury AND Tags:air con
. - Recherche approximative :
~
par exempleDescription:luxury~
renvoie des résultats avec des versions mal orthographiées de luxury. - Recherche de proximité de terme :
"term1 term2"~n
par exemple"indoor swimming pool"~3
renvoie des documents avec les mots indoor swimming pool qui sont à trois mots les uns des autres. - Recherche d’expression régulière :
/regular expression/
utilise une expression régulière entre/
, par exemple/[mh]otel/
renvoie des documents avec les termes hotel et motel. - Recherche par caractères génériques :
*
,?
où*
correspond à de nombreux caractères et?
correspond à un seul caractère, par exemple'air con'*
trouve les termes air con et air conditioning. - Regroupement de précédence :
(term AND (term OR term))
par exemple(Description:luxury OR Category:luxury) AND Tags:air?con*
. - Optimisation des termes :
^
par exempleDescription:luxury OR Category:luxury^3
donne aux hôtels de la catégorie luxury un score plus élevé que si luxury est dans la description.
Pour en savoir plus sur ces fonctionnalités, consultez Syntaxe de requête Lucene dans la Recherche Azure AI.
Améliorer les termes de recherche
En utilisant tout ce qui a été dit précédemment, vous pourrez améliorer les résultats. L’analyseur devrait donner une priorité plus élevée aux hôtels de la catégorie Luxe. Vous pouvez également être plus précis et rechercher air conditioning dans le champ Étiquettes.
(Description:luxury OR Category:luxury^3) AND Tags:'air con'*
En ajoutant les autres paramètres de chaîne de requête, vous obtenez cette chaîne de requête :
search=(Description:luxury OR Category:luxury^3) AND Tags:'air con'*&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
Les trois premiers hôtels retournés sont maintenant :
{
"@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
"@odata.count": 5,
"value": [
{
"@search.score": 5.3537707,
"HotelId": "8",
"HotelName": "Sapphire Resort",
"Description": "Downtown, close to everything, steps to the park, shopping, and restaurants.",
"Category": "Luxury",
"Tags": [
"free wifi",
"continental breakfast",
"air conditioning"
]
},
{
"@search.score": 5.3522806,
"HotelId": "49",
"HotelName": "Old Carrabelle Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
"Category": "Luxury",
"Tags": [
"air conditioning",
"laundry service",
"24-hour front desk service"
]
},
{
"@search.score": 4.1448884,
"HotelId": "18",
"HotelName": "Oceanside Resort",
"Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
"Category": "Budget",
"Tags": [
"view",
"laundry service",
"air conditioning"
]
},
...
]
}
Le score de recherche de Saphir Resorts a augmenté de 2,3321536 à 5,3537707 et c’est maintenant le premier hôtel que le client verra. L’Oceanside Resort est maintenant en troisième place.