Schnellstart: Vektorsuche mit REST-APIs

Erfahren Sie, wie Sie die Search-REST-APIs zum Erstellen, Laden und Abfragen von Vektoren in Azure AI Search verwenden.

In der Azure KI-Suche verfügt ein Vektorspeicher über ein Indexschema, das Vektor- und Nichtvektorfelder definiert, eine Vektorkonfiguration für Algorithmen, die den Einbettungsraum erstellen, und Einstellungen für Vektorfelddefinitionen, die in Abfrageanforderungen verwendet werden. Die API zum Erstellen eines Index erstellt den Vektorspeicher.

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Hinweis

In diesem Schnellstart wird der Vektorisierungsschritt weggelassen, und Einbettungen werden in Beispieldokumenten bereitgestellt. Wenn Sie die integrierte Datensegmentierung und Vektorisierung für Ihren eigenen Inhalt hinzufügen möchten, testen Sie den Assistenten zum Importieren und Vektorisieren von Daten für eine exemplarische End-to-End-Vorgehensweise.

Voraussetzungen

  • Visual Studio Code mit einem REST-Client. Wenn Sie Hilfe bei den ersten Schritten benötigen, lesen Sie Schnellstart: Textsuche mithilfe von REST.

  • Azure AI Search, in jeder Region und auf jeder Ebene. Sie können den Free-Tarif für diesen Schnellstart verwenden, aber „Basic“ oder höher wird für größere Datendateien empfohlen. Erstellen oder suchen Sie nach einer vorhandenen Ressource für Azure KI Search in Ihrem aktuellen Abonnement.

    Die meisten vorhandenen Dienste unterstützen die Vektorsuche. Bei einer kleinen Teilmenge der Dienste, die vor dem Januar 2019 erstellt wurden, schlägt die Erstellung eines Indexes, der Vektorfelder enthält, fehl. In dieser Situation muss ein neuer Dienst erstellt werden.

  • Um stattdessen das Abfragebeispiel auszuführen, das die semantische Neubewertung aufruft, muss Ihr Suchdienst die Dienstebene „Basic“ oder höher und den semantischen Sortierer aktiviert haben.

  • Optional eine Azure OpenAI-Ressource mit einer Bereitstellung von text-embedding-ada-002 Die Quelldatei .rest enthält einen optionalen Schritt zur Erzeugung neuer Texteinbettungen, aber wir stellen vorab generierte Einbettungen zur Verfügung, so dass Sie diese Abhängigkeit auslassen können.

Herunterladen von Dateien

Laden Sie ein REST-Beispiel von GitHub herunter, um die Anforderungen in dieser Schnellstartanleitung zu senden. Weitere Informationen finden Sie unter Herunterladen von Dateien von GitHub.

Sie können auch eine neue Datei auf Ihrem lokalen System anlegen und die Abfragen manuell anhand der Anleitung in diesem Artikel erstellen.

Abrufen eines Suchdienstendpunkts

Den Suchdienstendpunkt finden Sie im Azure-Portal.

  1. Melden Sie sich beim Azure-Portal an, und finden Sie Ihren Suchdienst.

  2. Sie finden die URL auf der Startseite Übersicht. Ein Beispiel für einen Endpunkt ist https://mydemo.search.windows.net.

    Screenshot der URL-Eigenschaft auf der Übersichtsseite

Sie fügen diesen Endpunkt in einem späteren Schritt in die Datei .rest oder .http ein.

Konfigurieren des Zugriffs

Anforderungen an den Suchendpunkt müssen authentifiziert und autorisiert werden. Sie können für diese Aufgabe API-Schlüssel oder Rollen verwenden. Schlüssel sind für ein Einstieg einfacher, Rollen sind jedoch sicherer.

Bei einer rollenbasierten Verbindung können Sie die folgenden Anweisungen verwenden, um eine Verbindung mit Azure KI-Suche unter Ihrer Identität herzustellen, aber nicht unter der Identität einer Client-App.

Option 1: Verwenden von Schlüsseln

Wählen Sie Einstellungen>Schlüssel aus, und kopieren Sie dann einen Administratorschlüssel. Mit einem Administratorschlüssel können Sie Objekte hinzufügen, ändern und löschen. Es gibt zwei austauschbare Administratorschlüssel. Kopieren Sie einen der beiden Schlüssel. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit Azure KI-Suche mithilfe der Schlüsselauthentifizierung.

Screenshot der API-Schlüssel im Azure-Portal

Sie fügen diesen Schlüssel in einem späteren Schritt in die Datei .rest oder .http ein.

Option 2: Verwenden von Rollen

Stellen Sie sicher, dass Ihr Suchdienst für den rollenbasierten Zugriff konfiguriert ist. Sie benötigen vorkonfigurierte Rollenzuweisungen für den Entwicklerzugriff. Ihre Rollenzuweisungen müssen die Berechtigungen zum Erstellen, Laden und Abfragen eines Suchindex gewähren.

Rufen Sie in diesem Abschnitt das Token Ihrer persönlichen Identität entweder über die Azure-Befehlszeilenschnittstelle, Azure PowerShell oder das Azure-Portal ab.

  1. Melden Sie sich bei der Azure-Befehlszeilenschnittstelle an.

    az login
    
  2. Rufen Sie das Token Ihrer persönlichen Identität ab.

    az account get-access-token --scope https://search.azure.com/.default
    

Sie fügen das Token Ihrer persönlichen Identität in einem späteren Schritt in die Datei .rest oder .http ein.

Hinweis

In diesem Abschnitt wird davon ausgegangen, dass Sie einen lokalen Client verwenden, der in Ihrem Namen eine Verbindung mit Azure KI-Suche herstellt. Ein alternativer Ansatz besteht darin, ein Token für die Client-App abzurufen. Dies ist aber nur möglich, wenn Ihre Anwendung ist bei Microsoft Entra ID registriert ist.

Erstellen eines Vektorindexes

Create Index (REST) erstellt einen Vektorindex und richtet die physischen Datenstrukturen in Ihrem Suchdienst ein.

Das Indexschema ist den Hotelinhalten entsprechend organisiert. Beispieldaten bestehen aus Vektor- und Nichtvektornamen und Beschreibungen von sieben fiktiven Hotels. Dieses Schema enthält Konfigurationen für die Vektorindizierung und Abfragen sowie für die semantische Rangfolge.

  1. Öffnen Sie eine neue Textdatei in Visual Studio Code.

  2. Legen Sie Variablen auf die Werte fest, die Sie zuvor erfasst haben. In diesem Beispiel wird ein Token für eine persönliche Identität verwendet.

    @baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
    @token = PUT-YOUR-PERSONAL-IDENTITY-TOKEN-HERE
    
  3. Speichern Sie die Datei mit der Erweiterung .rest oder .http.

  4. Fügen Sie das folgende Beispiel ein, um den Index hotels-vector-quickstart für Ihren Suchdienst zu erstellen.

    ### Create a new index
    POST {{baseUrl}}/indexes?api-version=2023-11-01  HTTP/1.1
        Content-Type: application/json
        Authorization: Bearer {{token}}
    
    {
        "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. Klicken Sie auf Anforderung senden. Erinnern Sie sich, dass Sie den REST-Client benötigen, um Anforderungen zu senden. Sie sollten eine HTTP/1.1 201 Created-Antwort erhalten. Der Antworttext sollte die JSON-Darstellung des Indexschemas enthalten.

    Die wichtigsten Punkte:

    • Die Sammlung fields enthält ein erforderliches Schlüsselfeld sowie Text und Vektorfelder (z. B. Description und DescriptionVector) für die Text- und Vektorsuche. Die gemeinsame Zuordnung von Vektorfeldern und Nicht-Vektorfeldern in demselben Index ermöglicht Hybridabfragen. Beispielsweise können Sie Filter, Stichwortsuche mit semantischer Rangfolge und Vektoren in einem einzelnen Abfragevorgang kombinieren.
    • Vektorfelder müssen type: Collection(Edm.Single) mit den Eigenschaften dimensions und vectorSearchProfile sein.
    • Der Abschnitt vectorSearch umfasst ein Array von ANN-Algorithmuskonfigurationen (Approximate Nearest Neighbors) und Profilen. Zu den unterstützten Algorithmen gehören der HNSW- (Hierarchical Navigable Small World) und der erschöpfende k-nächste-Nachbarn-Algorithmus (k-NN). Weitere Informationen finden Sie unter Relevanzbewertung in der Vektorsuche.
    • [Optional]: Die semantic-Konfiguration ermöglicht die Neubewertung der Rangfolge von Suchergebnissen. Sie können eine Neubewertung der Rangfolge für Ergebnisse in Abfragen vom Typ semantic für Zeichenfolgenfelder durchführen, die in der Konfiguration angegeben sind. Weitere Informationen finden Sie unter Übersicht über die semantischen Bewertung.

Hochladen von Dokumenten

Das Erstellen und das Laden des Index erfolgt in zwei separaten Schritten. In Azure KI-Suche enthält der Index alle durchsuchbaren Daten und Abfragen, die im Suchdienst ausgeführt werden. Für REST-Aufrufe werden die Daten als JSON-Dokumente bereitgestellt. Verwenden Sie für diese Aufgabe die REST-API Dokumente – Index.

Der URI wird um die docs-Sammlung und den index-Vorgang erweitert.

Wichtig

Das folgende Beispiel kann keinen Code ausführen. Zur besseren Lesbarkeit haben wir Vektorwerte ausgeschlossen, da jeder von ihnen 1.536 Einbettungen enthält, was für diesen Artikel zu lang ist. Wenn Sie diesen Schritt ausprobieren möchten, kopieren Sie den ausführbaren Code aus dem Beispiel auf GitHub.

### Upload documents
POST {{baseUrl}}/indexes/hotels-quickstart-vectors/docs/index?api-version=2023-11-01  HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}

{
    "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"
            ]
        }
    ]
}

Die wichtigsten Punkte:

  • Dokumente in der Nutzlast bestehen aus Feldern, die im Indexschema definiert sind.
  • Vektorfelder enthalten Gleitkommawerte. Das dimensions-Attribut weist mindestens 2 und höchstens 3.072 Gleitkommawerte auf. In dieser Schnellstartanleitung wird das Dimensionsattribut auf 1.536 festgelegt, weil dies die Größe der Einbettungen ist, die vom Azure OpenAI-Modell text-embedding-ada-002 generiert werden.

Ausführen von Abfragen

Nachdem Dokumente geladen worden sind, können Sie Vektorabfragen mithilfe von POST-REST-API für die Dokumentsuche ausstellen.

Es gibt eine Reihe von Abfragen zur Veranschaulichung verschiedener Muster:

Die Vektorabfragen in diesem Abschnitt basieren auf zwei Zeichenketten:

  • Suchzeichenfolge: historic hotel walk to restaurants and shopping
  • Vektorabfrage-Zeichenfolge (in eine mathematische Darstellung vektorisiert): classic lodging near running trails, eateries, retail

Die Vektorabfrage-Zeichenfolge ähnelt semantisch der Suchzeichenfolge, enthält jedoch Begriffe, die nicht im Suchindex enthalten sind. Wenn Sie eine Schlüsselwortsuche nach classic lodging near running trails, eateries, retail durchführen, erhalten Sie das Ergebnis null. Wir verwenden dieses Beispiel, um zu zeigen, wie Sie auch dann relevante Ergebnisse erhalten können, wenn keine übereinstimmenden Begriffe vorhanden sind.

Wichtig

Die folgenden Beispiele sind nicht ausführungsfähiger Code. Zur besseren Lesbarkeit haben wir Vektorwerte ausgeschlossen, weil jedes Array 1.536 Einbettungen enthält, was für diesen Artikel zu lang ist. Wenn Sie diese Abfragen ausprobieren möchten, kopieren Sie den ausführbaren Code aus dem Beispiel auf GitHub.

  1. Fügen Sie eine POST-Anforderung ein, um den Suchindex abzufragen. Wählen Sie Anforderung senden aus. Der URI wird erweitert, um den /docs/search Operator einzuschließen.

    ### Run a query
    POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01  HTTP/1.1
        Content-Type: application/json
        Authorization: Bearer {{token}}
    
        {
            "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
                }
            ]
        }
    

    Diese Vektorabfrage wird aus Platzgründen gekürzt. vectorQueries.vector enthält den vektorisierten Text der Abfrageeingabe, fields bestimmt, welche Vektorfelder durchsucht werden, und k gibt die Anzahl der nächsten Nachbarelemente an, die zurückgegeben werden sollen.

    Die Vektorabfragezeichenfolge lautet classic lodging near running trails, eateries, retail und wird für diese Abfrage in 1.536 Einbettungen vektorisiert.

  2. Überprüfen Sie die Antwort. Die Antwort für das Vektoräquivalent von classic lodging near running trails, eateries, retail enthält sieben Ergebnisse. Jedes Ergebnis stellt einen Suchscore und die in select aufgeführten Felder bereit. Bei einer Ähnlichkeitssuche enthält die Antwort immer k Ergebnisse, die nach der Wertähnlichkeitsscore sortiert sind.

    {
        "@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."
            }
        ]
    }
    

Einzelvektorsuche mit Filter

Sie können Filter hinzufügen, aber die Filter werden auf die Nicht-Vektorinhalte in Ihrem Index angewendet. In diesem Beispiel gilt der Filter für das Feld Tags und filtert alle Hotels heraus, die kein kostenloses WLAN bereitstellen.

  1. Fügen Sie eine POST-Anforderung ein, um den Suchindex abzufragen.

    ### 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
        Authorization: Bearer {{token}}
    
        {
            "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. Überprüfen Sie die Antwort. Die Abfrage ist dieselbe wie im vorigen Beispiel, enthält jedoch einen Ausschlussfilter für die Nachbearbeitung und gibt nur die drei Hotels zurück, die über kostenloses WLAN verfügen.

    {
    
        "@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"
                ]
            }
        ]
    }
    

Die Hybridsuche besteht aus Stichwortabfragen und Vektorabfragen in einer einzelnen Suchanforderung. In diesem Beispiel werden die Vektorabfrage und die Volltextsuche gleichzeitig ausgeführt:

  • Suchzeichenfolge: historic hotel walk to restaurants and shopping
  • Vektorabfrage-Zeichenfolge (in eine mathematische Darstellung vektorisiert): classic lodging near running trails, eateries, retail
  1. Fügen Sie eine POST-Anforderung ein, um den Suchindex abzufragen. Wählen Sie Anforderung senden aus.

    ### Run a hybrid query
    POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01  HTTP/1.1
        Content-Type: application/json
        Authorization: Bearer {{token}}
    
    {
        "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
            }
        ]
    }
    

    Da es sich um eine Hybridabfrage handelt, werden die Ergebnisse nach der Methode Reciprocal Rank Fusion (RRF) bewertet. RRF wertet Suchscores aus verschiedenen Suchergebnissen aus, nimmt die Umkehrung vor und führt dann die kombinierten Ergebnisse zusammen und sortiert sie. Die top-Anzahl der Ergebnisse wird zurückgegeben.

  2. Überprüfen Sie die Antwort.

    {
        "@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."
            }
        ]
    }
    

    Da RRF Ergebnisse zusammenführt, können die Eingaben leichter überprüft werden. Die folgenden Ergebnisse stammen nur aus der Volltextabfrage. Die beiden besten Ergebnisse lauten „Sublime Palace Hotel“ und „History Lion Resort“. Das Sublime Palace Hotel hat eine höhere BM25-Relevanzbewertung.

            {
                "@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"
                },
    

    In der reinen Vektorabfrage, in der HNSW für die Suche nach Übereinstimmungen verwendet wird, fällt das Sublime Palace Hotel auf die vierte Position zurück. Das Historic Lion Resort, das bei der Volltextsuche auf Platz zwei und bei der Vektorsuche auf Platz drei lag, weist nicht dieselbe Schwankungsbreite auf und erscheint daher in einem homogenisierten Resultset als Spitzenreiter.

        "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"
            }
        ]
    

Semantische Hybridsuche mit einem Filter

Dies ist die letzte Abfrage in der Sammlung. Diese Hybridabfrage mit semantischer Bewertung wird gefiltert, um nur die Hotels innerhalb eines Radius von 500 Kilometern von Washington D.C anzuzeigen. Sie können vectorFilterMode auf NULL festlegen, was der Standardeinstellung entspricht (preFilter für neuere Indizes und postFilter für ältere).

  1. Fügen Sie eine POST-Anforderung ein, um den Suchindex abzufragen. Wählen Sie Anforderung senden aus.

    ### Run a hybrid query
    POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01  HTTP/1.1
        Content-Type: application/json
        Authorization: Bearer {{token}}
    
    {
        "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. Überprüfen Sie die Antwort. Die Antwort enthält drei Hotels, die nach Standort gefiltert, nachStateProvince facettiert und semantisch neu bewertet werden, um Ergebnisse höherzustufen, die der Suchzeichenfolgenabfrage (historic hotel walk to restaurants and shopping) am nächsten kommen.

    Das Swirling Currents Hotel ist jetzt an der Spitze. Ohne semantische Rangfolge ist Nordick‘s Valley Motel die Nummer eins. Durch die semantische Bewertung erkennen die Maschinenverständnismodelle, dass historic für „Hotel, in fußläufiger Entfernung zu Restaurants und Einkaufsmöglichkeiten" gilt.

    {
        "@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"
                }
            }
        ]
    }
    

    Die wichtigsten Punkte:

    • Die Vektorsuche wird durch die Eigenschaft vectors.value angegeben. Die Schlüsselwortsuche wird durch die Eigenschaft search angegeben.
    • Bei einer Hybridsuche können Sie die Vektorsuche über Stichwörter in die Volltextsuche integrieren. Filter, Rechtschreibprüfung und semantische Rangfolge betreffen nur Textinhalte, nicht Vektoren. In dieser abschließenden Abfrage gibt es keinen semantischen Wert für answer, weil das System keinen ausreichend starken generiert hat.
    • Die eigentlichen Ergebnisse umfassen weitere Details, einschließlich semantischer Beschriftungen und Hervorhebungen. Die Ergebnisse wurden zur besseren Lesbarkeit abgeändert. Führen Sie die Anforderung im REST-Client aus, um die vollständige Struktur der Antwort zu erhalten.

Bereinigen

Wenn Sie in Ihrem eigenen Abonnement arbeiten, sollten Sie sich am Ende eines Projekts überlegen, ob Sie die erstellten Ressourcen noch benötigen. Ressourcen, die weiterhin ausgeführt werden, können Sie Geld kosten. Sie können einzelne Ressourcen oder die gesamte Ressourcengruppe mit allen darin enthaltenen Ressourcen löschen.

Ressourcen können im Portal über den Link Alle Ressourcen oder Ressourcengruppen im linken Navigationsbereich gesucht und verwaltet werden.

Sie können auch diesen DELETE-Befehl ausprobieren:

### Delete an index
DELETE  {{baseUrl}}/indexes/hotels-vector-quickstart?api-version=2023-11-01 HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer {{token}}

Nächste Schritte

Als nächster Schritt empfiehlt sich, den Democode für Python, C# oder JavaScript zu überprüfen.