Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Note
Recherche Azure AI est disponible via le portail Azure, les API REST et les SDK Azure. Il sous-tend également Foundry IQ, la couche de connaissances managée qui transforme le contenu d’entreprise en bases de connaissances réutilisables et prenant en charge les autorisations pour les agents dans le portail Microsoft Foundry.
Important
Les fonctionnalités, capacités ou propriétés marquées (préversion) ne sont pas couvertes par un accord de niveau de service, ne sont pas recommandées pour les workloads de production et peuvent être modifiées ou faire l’objet de restrictions avant leur mise à disposition générale. Les Recherche Azure AI termes de la préversion s'appliquent à toutes les fonctionnalités d'aperçu, qu'il s'agisse d'une fonctionnalité autonome ou d'une partie d'une fonctionnalité généralement disponible.
La réécriture des requêtes (préversion) est le processus de transformation de la requête d’un utilisateur en une requête plus efficace, en ajoutant d’autres termes et en affinant les résultats de la recherche. Le service de recherche envoie la requête de recherche (ou une variante) à un modèle de génération qui génère d’autres requêtes.
La réécriture des requêtes améliore les résultats du classement sémantique en corrigeant les fautes de frappe ou les erreurs d’orthographe dans les requêtes utilisateur et en développant les requêtes avec des synonymes.
La recherche avec la réécriture des requêtes fonctionne comme suit :
- La requête utilisateur est envoyée via la
searchpropriété dans la requête. - Le service de recherche envoie la requête de recherche (ou une variante) à un modèle de génération qui génère d’autres requêtes.
- Le service de recherche utilise la requête d’origine et les requêtes réécrites pour récupérer les résultats de la recherche.
La réécriture des requêtes est une fonctionnalité facultative. Sans réécriture de requête, le service de recherche utilise simplement la requête d’origine pour récupérer les résultats de la recherche.
Note
Les requêtes réécrites peuvent ne pas contenir tous les termes exacts que la requête d’origine avait. Cela peut avoir un impact sur les résultats de la recherche si la requête était très spécifique et exigeait des correspondances exactes pour les identificateurs uniques ou les codes de produit.
Conditions préalables
Recherche Azure AI dans n'importe quelle région qui fournit la réécriture de requête.
Index de recherche existant avec une configuration sémantique et du contenu de texte enrichi. Les exemples de ce guide utilisent l’index hotels-sample pour illustrer la réécriture des requêtes.
Pour suivre les instructions de cet article, vous avez besoin d’un client web qui prend en charge les demandes d’API REST. Les exemples de cet article ont été testés avec Visual Studio Code et l’extension REST Client.
Conseil
Le contenu qui inclut des explications ou des définitions fonctionne le mieux pour le classement sémantique.
Effectuer une requête de recherche avec des réécritures de requête
Dans cet exemple d’API REST, utilisez Search Documents (aperçu) pour formuler la requête.
Collez la requête suivante dans un client web en tant que modèle.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2026-08-01-preview { "search": "newer hotel near the water with a great restaurant", "semanticConfiguration":"en-semantic-config", "queryType":"semantic", "queryRewrites":"generative|count-5", "queryLanguage":"en-US", "debug":"queryRewrites", "top": 1 }Remplacez par
search-service-namele nom de votre service de recherche.Remplacez
hotels-samplepar votre nom d’index s’il est différent.Définissez « search » sur une requête de recherche en texte intégral. La propriété de recherche est requise pour la réécriture des requêtes, sauf si vous spécifiez des requêtes vectorielles. Si vous spécifiez des requêtes vectorielles, le texte « search » doit correspondre à la
"text"propriété de l’objet"vectorQueries". Votre chaîne de recherche peut prendre en charge la syntaxe simple ou la syntaxe Lucene complète.Définissez « semanticConfiguration » sur une configuration sémantique prédéfinie incorporée dans votre index.
Définissez « queryType » sur « sémantique ». Vous devez soit définir « queryType » sur « semantic », soit inclure une propriété « semanticQuery » non vide dans la requête. Le classement sémantique est requis pour la réécriture des requêtes.
Définissez « queryRewrites » sur « générative|count-5 » pour obtenir jusqu’à cinq réécritures de requête. Vous pouvez définir le nombre sur n’importe quelle valeur comprise entre 1 et 10.
Étant donné que vous avez demandé des réécritures de requête en définissant la propriété « queryRewrites », vous devez définir « queryLanguage » sur la langue du texte de recherche. Le service de recherche utilise la même langue pour les réécritures de requête. Dans cet exemple, vous utilisez «en-US». Les paramètres régionaux pris en charge sont :
en-AU,en-CA,en-GB,en-IN,en-US,ar-EG,ar-JO,ar-KW,ar-MA,ar-SA,bg-BG,bn-IN,ca-ES,cs-CZ,da-DK,de-DE,el-GR,es-ES,es-MX,et-EE,eu-ES,fa-AE,fi-FI,fr-CA,fr-FR,ga-IE,gl-ES,gu-IN,he-IL,hi-IN,hr-BA,hr-HR,hu-HU,hy-AM,id-ID,is-IS,it-IT,ja-JP,kn-IN,ko-KR,lt-LT,lv-LV,ml-IN,mr-IN,ms-BN,ms-MY,nb-NO,nl-BE,nl-NL,no-NO,pa-IN,pl-PL,pt-BR,pt-PT,ro-RO,ru-RU,sk-SK,sl-SL,sr-BA,sr-ME,sr-RS,sv-SE,ta-IN,te-IN,th-TH,tr-TR,uk-UA,ur-PK,vi-VN,zh-CN,zh-TW.Définissez « debug » sur « queryRewrites » pour obtenir les réécritures de requête dans la réponse.
Conseil
"debug": "queryRewrites"Défini uniquement à des fins de test. Pour de meilleures performances, n’utilisez pas de débogage en production.Définissez « top » sur 1 pour renvoyer uniquement le résultat de recherche supérieur.
Envoyez la requête pour exécuter la requête et renvoyer les résultats.
Ensuite, vous évaluez les résultats de la recherche avec les réécritures de requête.
Évaluer la réponse
Voici un exemple de réponse qui inclut des réécritures de requête :
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"inputQuery": "newer hotel near the water with a great restaurant",
"rewrites": [
"new waterfront hotels with top-rated eateries",
"new waterfront hotels with top-rated restaurants",
"new waterfront hotels with excellent dining",
"new waterfront hotels with top-rated dining",
"new water-side hotels with top-rated restaurants"
]
},
"vectors": []
}
},
"value": [
{
"@search.score": 58.992092,
"@search.rerankerScore": 2.815633535385132,
"HotelId": "18",
"HotelName": "Ocean Water Resort & Spa",
"Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
"Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
"Category": "Luxury",
"Tags": [
"view",
"pool",
"restaurant"
],
"ParkingIncluded": true,
"LastRenovationDate": "2020-11-14T00:00:00Z",
"Rating": 4.2,
"Location": {
"type": "Point",
"coordinates": [
-82.537735,
27.943701
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
},
//... more properties redacted for brevity
}
]
Voici quelques points clés à noter :
- Étant donné que vous définissez la propriété « debug » sur « queryRewrites » pour le test, la réponse inclut un
@search.debugobjet avec la requête d’entrée de texte et les réécritures de requête. - Étant donné que vous définissez la propriété « queryRewrites » sur « générative|count-5 », la réponse inclut jusqu’à cinq réécritures de requête.
- La
"inputQuery"valeur est la requête envoyée au modèle génératif pour la réécriture des requêtes. La requête d’entrée n’est pas toujours la même que celle de l’utilisateur"search".
Voici un exemple de réponse sans réécriture de requête.
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"inputQuery": "",
"rewrites": []
},
"vectors": []
}
},
"value": [
{
"@search.score": 7.774868,
"@search.rerankerScore": 2.815633535385132,
"HotelId": "18",
"HotelName": "Ocean Water Resort & Spa",
"Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
"Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
"Category": "Luxury",
"Tags": [
"view",
"pool",
"restaurant"
],
"ParkingIncluded": true,
"LastRenovationDate": "2020-11-14T00:00:00Z",
"Rating": 4.2,
"Location": {
"type": "Point",
"coordinates": [
-82.537735,
27.943701
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
},
//... more properties redacted for brevity
}
]
Requêtes vectorielles avec réécriture de requête
Vous pouvez inclure des requêtes vectorielles dans votre requête de recherche pour combiner la recherche de mots clés et la recherche vectorielle dans une seule requête et une réponse unifiée.
Voici un exemple de requête qui inclut une requête vectorielle avec des réécritures de requête. Modifiez un exemple précédent pour inclure une requête vectorielle.
- Ajoutez un objet « vectorQueries » à la requête. Cet objet inclut une requête vectorielle avec le « type » défini sur « text ».
- La valeur « text » est identique à la valeur « search ». Ces valeurs doivent être identiques pour que la réécriture des requêtes fonctionne.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2026-08-01-preview
{
"search": "newer hotel near the water with a great restaurant",
"vectorQueries": [
{
"kind": "text",
"text": "newer hotel near the water with a great restaurant",
"k": 50,
"fields": "Description",
"queryRewrites": "generative|count-3"
}
],
"semanticConfiguration":"en-semantic-config",
"queryType":"semantic",
"queryRewrites":"generative|count-5",
"queryLanguage":"en-US",
"top": 1
}
La réponse inclut les réécritures de requête pour la requête de texte et la requête vectorielle.
Tester les réécritures de requête avec débogage
Vous devez tester vos réécritures de requête pour vous assurer qu’elles fonctionnent comme prévu. Définissez la propriété "debug": "queryRewrites" dans votre requête pour obtenir les réécritures de requête dans la réponse. Le paramètre "debug" est facultatif à des fins de test. Pour de meilleures performances, ne définissez pas cette propriété en environnement de production.
Raisons de réponse partielle
Vous pouvez observer que la réponse de débogage (test) inclut un tableau vide pour les propriétés text.rewrites et vectors.
{
"@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels-sample')/$metadata#docs(*)",
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"rewrites": []
},
"vectors": []
}
},
"@search.semanticPartialResponseReason": "Transient",
"@search.semanticQueryRewriteResultType": "OriginalQueryOnly",
//... more properties redacted for brevity
}
Dans l’exemple précédent :
- La réponse inclut une
@search.semanticPartialResponseReasonpropriété avec la valeur « Temporaire ». Ce message signifie qu’au moins une des requêtes n’a pas pu être terminée. - La réponse inclut également une
@search.semanticQueryRewriteResultTypepropriété avec la valeur « OriginalQueryOnly ». Ce message signifie que les réécritures de requête ne sont pas disponibles. Seule la requête d’origine est utilisée pour récupérer les résultats de la recherche.
Étapes suivantes
Le classement sémantique peut être utilisé dans les requêtes hybrides qui combinent la recherche de mots clés et la recherche vectorielle dans une seule requête et une réponse unifiée.