Démarrage rapide : Recherche vectorielle à l’aide de REST
Découvrez comment utiliser les API Search REST pour créer, charger et interroger des vecteurs dans la Recherche Azure AI.
Dans Recherche Azure AI, un magasin de vecteurs comprend un schéma d’index qui définit des champs vectoriels et non vectoriels, une configuration de recherche vectorielle pour les algorithmes qui créent l’espace d’incorporation ainsi que des paramètres sur les définitions des champs vectoriels qui sont évalués au moment de la requête. L’API REST Créer un index crée le magasin de vecteurs.
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Remarque
Ce démarrage rapide omet l’étape de vectorisation et fournit des incorporations dans les exemples de documents. Si vous souhaitez ajouter la segmentation et la vectorisation des données intégrées sur votre contenu, essayez l’Assistant Importation et vectorisation des données pour découvrir une procédure pas à pas de bout en bout.
Prérequis
Visual Studio Code avec un client REST.
Recherche Azure AI, dans n’importe quelle région et sur n’importe quel niveau. Vous pouvez utiliser le niveau Gratuit pour ce guide de démarrage rapide, mais un niveau Base ou supérieur est recommandé pour les fichiers de données plus volumineux. Créez ou recherchez une ressource Recherche Azure AI existante sous votre abonnement actuel.
La plupart des services existants prennent en charge la recherche vectorielle. Pour un petit sous-ensemble de services créés avant janvier 2019, un index qui contient des champs vectoriels échoue à la création. Dans ce cas, un nouveau service doit être créé.
Pour exécuter l’exemple de requête qui invoque le reclassement sémantique, votre service de recherche doit avoir le niveau Essentiel ou supérieur, avec le classeur sémantique activé.
Télécharger les fichiers
Téléchargez un exemple REST à partir de GitHub pour envoyer les requêtes dans ce démarrage rapide. Si vous souhaitez obtenir plus d’informations, consultez Téléchargement de fichiers à partir de GitHub.
Vous pouvez également démarrer un nouveau fichier sur votre système local et créer des requêtes manuellement en tirant parti des instructions contenues dans cet article.
Obtenir un point de terminaison de recherche et une clé API
Vous pouvez trouver le point de terminaison du service de recherche et les clés API dans le Portail Azure. Vous collerez ces valeurs dans un fichier .rest
ou .http
à l’étape suivante.
Les demandes effectuées au point de terminaison de recherche doivent être authentifiées et autorisées. Vous pouvez utiliser des clés d’API ou des rôles pour cette tâche. Les clés sont plus faciles à utiliser, mais les rôles sont plus sécurisés. Bien que nous utilisions des clés API dans ce guide de démarrage rapide, nous vous recommandons de passer à une connexion sans clé.
Connectez-vous au Portail Azure, puis trouvez votre service de recherche.
Dans la page d’accueil Vue d’ensemble, recherchez l’URL. Voici un exemple de point de terminaison :
https://mydemo.search.windows.net
.Sélectionnez Paramètres>Clés. Vous devez activer l’option Clés API ou Les deux. Les clés API d’administration permettent d’ajouter, de modifier et de supprimer des objets. Il existe deux clés d’administration interchangeables. Copiez l’une ou l’autre.
Créer un index vectoriel
Créer un index (REST) crée un index vectoriel et configure des structures de données physiques sur votre service de recherche.
Le schéma d’index est organisé autour du contenu d’hôtel. Les exemples de données se composent de noms et de descriptions vectoriels et non vectoriels de sept hôtels fictifs. Ce schéma inclut des configurations pour l’indexation et les requêtes vectorielles, ainsi que pour le classement sémantique.
Créez un fichier texte dans Visual Studio Code.
En haut du fichier, ajoutez des variables pour les valeurs que vous avez collectées précédemment.
@baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE @apiKey = PUT-YOUR-ADMIN-KEY-HERE
Enregistrez le fichier avec une extension de fichier
.rest
ou.http
.Collez l’exemple suivant pour créer l’index
hotels-vector-quickstart
sur votre service de recherche.### Create a new index POST {{baseUrl}}/indexes?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json api-key: {{apiKey}} { "name": "hotels-vector-quickstart", "fields": [ { "name": "HotelId", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": false, "key": true }, { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": true, "facetable": false }, { "name": "HotelNameVector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "my-vector-profile" }, { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": false, "facetable": false }, { "name": "DescriptionVector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "my-vector-profile" }, { "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }, { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "retrievable": true, "sortable": false, "facetable": true }, { "name": "Address", "type": "Edm.ComplexType", "fields": [ { "name": "City", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }, { "name": "StateProvince", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true } ] }, { "name": "Location", "type": "Edm.GeographyPoint", "searchable": false, "filterable": true, "retrievable": true, "sortable": true, "facetable": false } ], "vectorSearch": { "algorithms": [ { "name": "my-hnsw-vector-config-1", "kind": "hnsw", "hnswParameters": { "m": 4, "efConstruction": 400, "efSearch": 500, "metric": "cosine" } } ], "profiles": [ { "name": "my-vector-profile", "algorithm": "my-hnsw-vector-config-1" } ] }, "semantic": { "configurations": [ { "name": "my-semantic-config", "prioritizedFields": { "titleField": { "fieldName": "HotelName" }, "prioritizedContentFields": [ { "fieldName": "Description" } ], "prioritizedKeywordsFields": [ { "fieldName": "Tags" } ] } } ] } }
Enregistrez à nouveau le fichier, puis sélectionnez Envoyer la demande. Vous devez avoir une réponse
HTTP/1.1 201 Created
. Le corps de la réponse doit inclure la représentation JSON du schéma d’index.Points à retenir concernant cette API REST :
La collection
fields
inclut un champ de clé obligatoire, du texte et des champs vectoriels (tels queDescription
,DescriptionVector
) pour la recherche de textes et de vecteurs. La colocalisation de champs vectoriels et non vectoriels dans le même index permet d’effectuer des requêtes hybrides. Par instance, vous pouvez combiner des filtres, une recherche de texte avec un classement sémantique et des vecteurs en une seule opération de requête.Les champs vectoriels doivent être
type: Collection(Edm.Single)
avec les propriétésdimensions
etvectorSearchProfile
.La section
vectorSearch
est un tableau de configurations et de profils d’algorithme approximatif voisin le plus proche. Les algorithmes pris en charge comprennent le petit monde navigable hiérarchique et le k-voisin le plus proche exhaustif. Pour plus d’informations, voir l’évaluation de la pertinence dans la recherche vectorielle.[Facultatif] : la configuration
semantic
permet de reclasser les résultats de la recherche. Vous pouvez reclasser les résultats dans des requêtes de typesemantic
pour les champs de chaîne spécifiés dans la configuration. Pour en savoir plus, voir Aperçu du classement sémantique.
Chargement de documents
La création et le chargement de l’index sont des étapes distinctes. Dans Recherche Azure AI, l’index contient toutes les données pouvant faire l’objet d’une recherche et les requêtes s’exécutent sur le service de recherche. Pour les appels REST, les données sont fournies sous forme de documents JSON. Utilisez Documents – API REST d’index pour cette tâche.
L’URL est étendue pour inclure la collection docs
et l’opération index
.
Important
L’exemple suivant n’est pas un code exécutable. Pour une meilleure lisibilité, nous avons exclu les valeurs vectorielles, car chacune contient 1,536 incorporations, ce qui est trop long pour cet article. Si vous voulez essayer cette étape, copiez le code exécutable de l’échantillon sur GitHub.
Collez une demande valide qui charge des documents, comme dans l’exemple ci-dessous.
Enregistrez le fichier, puis sélectionnez Envoyer la demande. Vous devez avoir une réponse
HTTP/1.1 201 Created
. Le corps de la réponse doit inclure la représentation JSON des documents de recherche.
### Upload documents
POST {{baseUrl}}/indexes/hotels-quickstart-vectors/docs/index?api-version=2023-11-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"value": [
{
"@search.action": "mergeOrUpload",
"HotelId": "1",
"HotelName": "Stay-Kay City Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"The hotel is ideally located on the main commercial artery of the city
in the heart of New York.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Boutique",
"Tags": [
"pool",
"air conditioning",
"concierge"
],
},
{
"@search.action": "mergeOrUpload",
"HotelId": "2",
"HotelName": "Old Century Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"The hotel is situated in a nineteenth century plaza, which has been
expanded and renovated to the highest architectural standards to create a modern,
functional and first-class hotel in which art and unique historical elements
coexist with the most modern comforts.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Boutique",
"Tags": [
"pool",
"air conditioning",
"free wifi",
"concierge"
]
},
{
"@search.action": "mergeOrUpload",
"HotelId": "3",
"HotelName": "Gastronomic Landscape Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"The Hotel stands out for its gastronomic excellence under the management of
William Dough, who advises on and oversees all of the Hotel’s restaurant services.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Resort and Spa",
"Tags": [
"air conditioning",
"bar",
"continental breakfast"
]
}
{
"@search.action": "mergeOrUpload",
"HotelId": "4",
"HotelName": "Sublime Palace Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"Sublime Palace Hotel is located in the heart of the historic center of
Sublime in an extremely vibrant and lively area within short walking distance to
the sites and landmarks of the city and is surrounded by the extraordinary beauty
of churches, buildings, shops and monuments.
Sublime Palace is part of a lovingly restored 1800 palace.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Boutique",
"Tags": [
"concierge",
"view",
"24-hour front desk service"
]
},
{
"@search.action": "mergeOrUpload",
"HotelId": "13",
"HotelName": "Luxury Lion Resort",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"Unmatched Luxury. Visit our downtown hotel to indulge in luxury
accommodations. Moments from the stadium, we feature the best in comfort",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Resort and Spa",
"Tags": [
"view",
"free wifi",
"pool"
]
},
{
"@search.action": "mergeOrUpload",
"HotelId": "48",
"HotelName": "Nordick's Valley Motel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"Only 90 miles (about 2 hours) from the nation's capital and nearby
most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring
the caverns? It's all nearby and we have specially priced packages to help make
our B&B your home base for fun while visiting the valley.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Boutique",
"Tags": [
"continental breakfast",
"air conditioning",
"free wifi"
],
},
{
"@search.action": "mergeOrUpload",
"HotelId": "49",
"HotelName": "Swirling Currents Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"Spacious rooms, glamorous suites and residences, rooftop pool, walking
access to shopping, dining, entertainment and the city center.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Luxury",
"Tags": [
"air conditioning",
"laundry service",
"24-hour front desk service"
]
}
]
}
Points à retenir concernant cette API REST :
Les documents de la charge utile se composent de champs définis dans le schéma d’index.
Les champs vectoriels contiennent des valeurs à virgule flottante. L’attribut dimensions a un minimum de 2 et un maximum de 3,072 valeurs à virgule flottante chacun. Ce guide de démarrage rapide définit l’attribut dimensions sur 1,536, car il s’agit de la taille des incorporations générées par le modèle text-embedding-ada-002 d’Azure OpenAI.
Exécuter des requêtes
Maintenant que des documents sont chargés, vous pouvez émettre des requêtes vectorielles les concernant à l’aide de Documents – Rechercher des publications (REST).
Il existe plusieurs requêtes pour illustrer différents modèles :
- Recherche vectorielle unique
- Recherche vectorielle unique avec filtre
- Recherche hybride
- Recherche hybride sémantique avec filtre
Les requêtes vectorielles de cette section sont basées sur deux chaînes :
- Rechercher une chaîne :
historic hotel walk to restaurants and shopping
- Chaîne de requête Vector (vectorisée en représentation mathématique) :
classic lodging near running trails, eateries, retail
La chaîne de requête vectorielle est sémantiquement similaire à la chaîne de recherche, mais contient des termes qui n’existent pas dans l’index de recherche. Si vous effectuez une recherche par mot clé pour classic lodging near running trails, eateries, retail
, les résultats sont nuls. Cet exemple est utilisé pour montrer comment obtenir des résultats pertinents même s’il n’existe aucun terme correspondant.
Important
Les exemples suivants ne sont pas un code exécutable. Pour une meilleure lisibilité, nous avons exclu les valeurs vectorielles, car chaque groupe contient 1,536 incorporations, ce qui est trop long pour cet article. Si vous souhaitez essayer ces requêtes, copiez le code exécutable de l’échantillon sur GitHub.
Recherche vectorielle unique
Collez une requête POST pour interroger l’index de recherche. Enregistrez le fichier. Sélectionnez ensuite Envoyer la requête. L’URI est étendue pour inclure l’opérateur
/docs/search
.### Run a query POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json api-key: {{apiKey}} { "count": true, "select": "HotelId, HotelName, Description, Category", "vectorQueries": [ { "vector"": [0.01944167, 0.0040178085 . . . TRIMMED FOR BREVITY 010858015, -0.017496133], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true } ] }
Cette requête vectorielle est raccourcie pour la concision. Le
vectorQueries.vector
contient le texte vectorisé de l’entrée de requête,fields
détermine les champs vectoriels recherchés etk
spécifie le nombre des plus proches voisins à retourner.La chaîne de requête vectorielle est
classic lodging near running trails, eateries, retail
, qui est vectorisée en 1,536 incorporations pour cette requête.Vérifiez la réponse. La réponse du vecteur équivalent de
classic lodging near running trails, eateries, retail
comprend sept résultats. Chaque résultat donne un score de recherche et les champs répertoriés dansselect
. Dans une recherche de similarité, la réponse inclut toujours les résultatsk
classés par ordre de similarité de la valeur.{ "@odata.context": "https://my-demo-search.search.windows.net/indexes('hotels-vector-quickstart')/$metadata#docs(*)", "@odata.count": 7, "value": [ { "@search.score": 0.857736, "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley." }, { "@search.score": 0.8399129, "HotelName": "Swirling Currents Hotel", "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center." }, { "@search.score": 0.8383954, "HotelName": "Luxury Lion Resort", "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort" }, { "@search.score": 0.8254346, "HotelName": "Sublime Palace Hotel", "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace." }, { "@search.score": 0.82380056, "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York." }, { "@search.score": 0.81514084, "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts." }, { "@search.score": 0.8133763, "HotelName": "Gastronomic Landscape Hotel", "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services." } ] }
Recherche vectorielle unique avec filtre
Vous pouvez ajouter des filtres, mais les filtres sont appliqués au contenu non vectoriel de votre index. Dans cet exemple, le filtre s’applique au champ Tags
pour filtrer les hôtels qui ne fournissent pas de wifi gratuit.
Collez une requête POST pour interroger l’index de recherche.
### Run a vector query with a filter POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json api-key: {{apiKey}} { "count": true, "select": "HotelId, HotelName, Category, Tags, Description", "filter": "Tags/any(tag: tag eq 'free wifi')", "vectorFilterMode": "postFilter", "vectorQueries": [ { "vector": [ VECTOR OMITTED ], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true }, ] }
Vérifiez la réponse. La requête est la même que dans l’exemple précédent, mais elle inclut un filtre d’exclusion post-traitement et ne renvoie que les trois hôtels disposant d’une connexion Wi-Fi gratuite.
{ "@odata.count": 3, "value": [ { "@search.score": 0.857736, "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.", "Tags": [ "continental breakfast", "air conditioning", "free wifi" ] }, { "@search.score": 0.8383954, "HotelName": "Luxury Lion Resort", "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort", "Tags": [ "view", "free wifi", "pool" ] }, { "@search.score": 0.81514084, "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.", "Tags": [ "pool", "free wifi", "concierge" ] } ] }
Recherche hybride
La recherche hybride se compose de requêtes par mot clé et de requêtes vectorielles dans une seule requête de recherche. Cet exemple exécute simultanément la requête vectorielle et la recherche de texte intégral :
- Rechercher une chaîne :
historic hotel walk to restaurants and shopping
- Chaîne de requête Vector (vectorisée en représentation mathématique) :
classic lodging near running trails, eateries, retail
Collez une requête POST pour interroger l’index de recherche. Sélectionnez ensuite Envoyer la requête.
### Run a hybrid query POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json api-key: {{apiKey}} { "count": true, "search": "historic hotel walk to restaurants and shopping", "select": "HotelName, Description", "top": 7, "vectorQueries": [ { "vector": [ VECTOR OMITTED], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true } ] }
Étant donné qu’il s’agit d’une requête hybride, les résultats sont classés par fusion de rang réciproque (RRF). RRF évalue les scores de plusieurs résultats de recherche, prend l’inverse, puis fusionne et trie les résultats combinés.
top
est le nombre de résultats retournés.Vérifiez la réponse.
{ "@odata.count": 7, "value": [ { "@search.score": 0.03279569745063782, "HotelName": "Luxury Lion Resort", "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort" }, { "@search.score": 0.03226646035909653, "HotelName": "Sublime Palace Hotel", "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace." }, { "@search.score": 0.03226646035909653, "HotelName": "Swirling Currents Hotel", "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center." }, { "@search.score": 0.03205128386616707, "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley." }, { "@search.score": 0.03128054738044739, "HotelName": "Gastronomic Landscape Hotel", "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services." }, { "@search.score": 0.03100961446762085, "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts." }, { "@search.score": 0.03077651560306549, "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York." } ] }
Étant donné que RRF fusionne les résultats, il permet de passer en revue les entrées. Les résultats suivants proviennent uniquement de la requête de texte intégral. Les deux premiers résultats sont Sublime Palace Hotel et History Lion Resort. Le Sublime Palace Hotel a un meilleur score de pertinence BM25.
{ "@search.score": 2.2626662, "HotelName": "Sublime Palace Hotel", "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace." }, { "@search.score": 0.86421645, "HotelName": "Luxury Lion Resort", "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort" },
Dans la requête vectorielle seule, qui utilise HNSW pour trouver des correspondances, l’hôtel Sublime Palace tombe en quatrième position. Historic Lion, qui était en deuxième position dans la requête de texte intégral et en troisième position dans la recherche vectorielle, ne connaît pas la même amplitude de fluctuation, de sorte qu’il apparaît en tête de liste dans un ensemble de résultats homogénéisés.
"value": [ { "@search.score": 0.857736, "HotelId": "48", "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.", "Category": "Boutique" }, { "@search.score": 0.8399129, "HotelId": "49", "HotelName": "Swirling Currents Hotel", "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.", "Category": "Luxury" }, { "@search.score": 0.8383954, "HotelId": "13", "HotelName": "Luxury 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": "Resort and Spa" }, { "@search.score": 0.8254346, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace.", "Category": "Boutique" }, { "@search.score": 0.82380056, "HotelId": "1", "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York.", "Category": "Boutique" }, { "@search.score": 0.81514084, "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.", "Category": "Boutique" }, { "@search.score": 0.8133763, "HotelId": "3", "HotelName": "Gastronomic Landscape Hotel", "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services.", "Category": "Resort and Spa" } ]
Recherche hybride sémantique avec un filtre
Voici la dernière requête de la collection. Cette requête hybride avec classement sémantique est filtrée pour n’afficher que les hôtels situés dans un rayon de 500 kilomètres autour de Washington D.C. Vous pouvez définir vectorFilterMode
sur null, ce qui équivaut à la valeur par défaut (preFilter
pour les index plus récents et les postFilter
pour les anciens).
Collez une requête POST pour interroger l’index de recherche. Sélectionnez ensuite Envoyer la requête.
### Run a hybrid query POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json api-key: {{apiKey}} { "count": true, "search": "historic hotel walk to restaurants and shopping", "select": "HotelId, HotelName, Category, Description,Address/City, Address/StateProvince", "filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 500", "vectorFilterMode": null, "facets": [ "Address/StateProvince"], "top": 7, "queryType": "semantic", "answers": "extractive|count-3", "captions": "extractive|highlight-true", "semanticConfiguration": "my-semantic-config", "vectorQueries": [ { "vector": [ VECTOR OMITTED ], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true } ] }
Vérifiez la réponse. La réponse est constituée de trois hôtels, qui sont filtrés par emplacement et facettés par
StateProvince
et sémantiquement reclassés pour promouvoir les résultats les plus proches de la chaîne de recherche (historic hotel walk to restaurants and shopping
).L’hôtel Swirling Currents occupe désormais la première place. Sans classement sémantique, le Nordick's Valley est le numéro 1. Avec le classement sémantique, les modèles de compréhension automatique reconnaissent qu’il
historic
s’agit d’un « hôtel situé à proximité de restaurants et de magasins ».{ "@odata.count": 3, "@search.facets": { "Address/StateProvince": [ { "count": 1, "value": "NY" }, { "count": 1, "value": "VA" } ] }, "@search.answers": [], "value": [ { "@search.score": 0.03306011110544205, "@search.rerankerScore": 2.5094974040985107, "HotelId": "49", "HotelName": "Swirling Currents Hotel", "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.", "Category": "Luxury", "Address": { "City": "Arlington", "StateProvince": "VA" } }, { "@search.score": 0.03306011110544205, "@search.rerankerScore": 2.0370211601257324, "HotelId": "48", "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.", "Category": "Boutique", "Address": { "City": "Washington D.C.", "StateProvince": null } }, { "@search.score": 0.032258063554763794, "@search.rerankerScore": 1.6706111431121826, "HotelId": "1", "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York.", "Category": "Boutique", "Address": { "City": "New York", "StateProvince": "NY" } } ] }
Points à retenir concernant cette API REST :
La recherche vectorielle est spécifiée par le biais de la propriété de
vectors.value
. La recherche par mot-clé est spécifiée par le biais de la propriétésearch
.Dans une recherche hybride, vous pouvez intégrer la recherche vectorielle à la requête de texte intégral par mots-clés. Les filtres, le contrôle orthographique et le classement sémantique s’appliquent uniquement au contenu textuel, et non aux vecteurs. Dans cette dernière requête,
answer
n’inclut pas la sémantique, car le système n’en a pas produit une qui était suffisamment forte.Les résultats réels incluent plus de détails, notamment les textes de légendes sémantiques et les mises en surbrillance. Les résultats ont été modifiés pour des raisons de lisibilité. Pour obtenir la structure complète de la réponse, exécutez la requête dans le client REST.
Nettoyage
Lorsque vous travaillez dans votre propre abonnement, il est recommandé, à la fin de chaque projet, de déterminer si vous avez toujours besoin des ressources que vous avez créées. Les ressources laissées en cours d’exécution peuvent vous coûter de l’argent. Vous pouvez supprimer les ressources individuellement, ou supprimer le groupe de ressources pour supprimer l’ensemble des ressources.
Vous pouvez rechercher et gérer des ressources dans le portail Azure avec les liens Toutes les ressources ou Groupes de ressources situés dans le volet le plus à gauche.
Vous pouvez également essayer cette commande DELETE
:
### Delete an index
DELETE {{baseUrl}}/indexes/hotels-vector-quickstart?api-version=2023-11-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
Étapes suivantes
À l’étape suivante, nous vous recommandons d’apprendre à appeler des appels d’API REST sans clés API.
Vous pouvez également passer en revue le code de démonstration pour Python, C# ou JavaScript.