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 la Recherche Azure AI, un magasin de vecteurs a un schéma d’index qui définit des champs vectoriels et non vectoriels, une configuration vectorielle pour les algorithmes qui créent l’espace d’incorporation et les paramètres sur les définitions de champ vectoriel utilisées dans les requêtes de requête. L’API 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

La version stable de l’API REST 2023-11-01 dépend des solutions externes pour la segmentation et l’incorporation des données. Si vous souhaitez évaluer les fonctionnalités intégrées de segmentation et de vectorisation des données (préversion publique), essayez l’Assistant Importation et vectorisation des données pour une procédure pas à pas de bout en bout.

Prérequis

  • Visual Studio Code avec un client REST. Si vous avez besoin d’aide pour démarrer, consultez Démarrage rapide : Recherche de texte à l’aide de 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 De base ou supérieur, avec le classement sémantique activé.

  • Éventuellement, une ressource Azure OpenAI avec un déploiement de text-embedding-ada-002. Le fichier source .rest une étape facultative pour générer de nouveaux incorporations de texte, mais nous fournissons des incorporations pré-générées afin de pouvoir omettre cette dépendance.

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.

Copier la clé et l’URL d’un service de recherche

Les appels REST requièrent le point de terminaison de service de recherche et une clé API sur chaque requête. Vous pouvez obtenir ces valeurs à partir du Portail Azure.

  1. Connectez-vous au portail Azure. Accédez à la page de présentation et copiez l’URL que vous y trouverez. Voici un exemple de point de terminaison : https://mydemo.search.windows.net.

  2. Sélectionnez Paramètres>Clés et copiez une clé d’administration. Les clés d’administration sont utilisées pour ajouter, modifier et supprimer des objets. Il existe deux clés d’administration interchangeables. Copiez l’une ou l’autre.

    Capture d’écran illustrant l’URL et des clés API dans le Portail Azure.

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.

  1. Ouvrez un nouveau fichier texte dans Visual Studio Code.

  2. Définissez les variables sur le point de terminaison de recherche et la clé API que vous avez collectée précédemment.

    @baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
    @apiKey = PUT-YOUR-ADMIN-API-KEY-HERE
    
  3. Enregistrez le fichier avec une extension de fichier .rest.

  4. 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"
                    }
                },
                {
                    "name": "my-hnsw-vector-config-2",
                    "kind": "hnsw",
                    "hnswParameters": 
                    {
                        "m": 4,
                        "metric": "euclidean"
                    }
                },
                {
                    "name": "my-eknn-vector-config",
                    "kind": "exhaustiveKnn",
                    "exhaustiveKnnParameters": 
                    {
                        "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" }
                        ]
                    }
                }
            ]
        }
    }
    
  5. Sélectionnez Envoyer une demande. Rappelez-vous que vous avez besoin du client REST pour envoyer des requêtes. 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 essentiels :

    • La collection fields inclut un champ de clé obligatoire, du texte et des champs vectoriels (tels que Description, 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és dimensions et vectorSearchProfile.
    • 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 type semantic 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.

### 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": "Secret Point Motel",
            "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": "Twin Dome 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": "Triple 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 Cliff Hotel",
            "HotelNameVector": [VECTOR ARRAY OMITTED],
            "Description": 
                "Sublime Cliff 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 Cliff 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": "Historic 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": "Nordicks Hotel",
            "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": "Old Carrabelle 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 essentiels :

  • 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’Open AI.

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 :

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.

  1. Collez une requête POST pour interroger l’index de recherche. 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 et k 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.

  2. 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 dans select. Dans une recherche de similarité, la réponse inclut toujours les résultats k 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 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": "Old Carrabelle 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": "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"
            },
            {
                "@search.score": 0.8254346,
                "HotelName": "Sublime Cliff Hotel",
                "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 1800 palace."
            },
            {
                "@search.score": 0.82380056,
                "HotelName": "Secret Point 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": "Twin Dome 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": "Triple 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.

  1. 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
            },
        ]
    }
    
  2. 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 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": "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",
                "Tags": [
                    "view",
                    "free wifi",
                    "pool"
                ]
            },
            {
                "@search.score": 0.81514084,
                "HotelName": "Twin Dome 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"
                ]
            }
        ]
    }
    

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
  1. 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.

  2. Vérifiez la réponse.

    {
        "@odata.count": 7,
        "value": [
            {
                "@search.score": 0.03279569745063782,
                "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"
            },
            {
                "@search.score": 0.03226646035909653,
                "HotelName": "Sublime Cliff Hotel",
                "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 1800 palace."
            },
            {
                "@search.score": 0.03226646035909653,
                "HotelName": "Old Carrabelle 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 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": "Triple 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": "Twin Dome 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": "Secret Point 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 Cliff Hotel et History Lion Resort. Le Sublime Cliff Hotel a un meilleur score de pertinence BM25.

            {
                "@search.score": 2.2626662,
                "HotelName": "Sublime Cliff Hotel",
                "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 1800 palace."
            },
            {
                "@search.score": 0.86421645,
                "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"
                },
    

    Dans la requête vectorielle seule, qui utilise HNSW pour trouver des correspondances, l’hôtel Sublime Cliff 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 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": "Old Carrabelle 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": "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": "Resort and Spa"
            },
            {
                "@search.score": 0.8254346,
                "HotelId": "4",
                "HotelName": "Sublime Cliff Hotel",
                "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 1800 palace.",
                "Category": "Boutique"
            },
            {
                "@search.score": 0.82380056,
                "HotelId": "1",
                "HotelName": "Secret Point 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": "Twin Dome 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": "Triple 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).

  1. 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
            }
        ]
    }
    
  2. 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 Old Carabelle occupe désormais la première place. Sans classement sémantique, le Nordick's Hotel 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": "Old Carrabelle 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 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": "Secret Point 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 essentiels :

    • 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 une par une ou supprimer le groupe de ressources.

Vous pouvez rechercher et gérer des ressources dans le portail en tirant parti des 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’évaluer le code de démonstration pour Python, C#, ou JavaScript.