Udostępnij za pośrednictwem


Szybki start: wyszukiwanie wektorów przy użyciu interfejsu REST

Dowiedz się, jak używać interfejsów API REST wyszukiwania do tworzenia, ładowania i wektorów zapytań w usłudze Azure AI Search.

W usłudze Azure AI Search magazyn wektorów ma schemat indeksu, który definiuje pola wektorów i niewektorów, konfigurację wektorów dla algorytmów tworzących miejsce osadzania i ustawienia definicji pól wektorów używanych w żądaniach zapytań. Interfejs API tworzenia indeksu tworzy magazyn wektorów.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Uwaga

Ten przewodnik Szybki start pomija krok wektoryzacji i udostępnia osadzanie w przykładowych dokumentach. Jeśli chcesz dodać wbudowane fragmentowanie i wektoryzację danych na własną zawartość, wypróbuj kreatora Importowanie i wektoryzowanie danych w celu uzyskania kompleksowego przewodnika.

Wymagania wstępne

  • Program Visual Studio Code z klientem REST. Jeśli potrzebujesz pomocy dotyczącej rozpoczynania pracy, zobacz Szybki start: wyszukiwanie tekstu przy użyciu interfejsu REST.

  • Usługa Azure AI Search w dowolnym regionie i w dowolnej warstwie. W tym przewodniku Szybki start możesz użyć warstwy Bezpłatna, ale w przypadku większych plików danych zalecane jest użycie warstwy Podstawowa lub nowsza. Utwórz lub znajdź istniejący zasób usługi Azure AI Search w ramach bieżącej subskrypcji.

    Większość istniejących usług obsługuje wyszukiwanie wektorów. W przypadku małego podzestawu usług utworzonych przed styczniem 2019 r. indeks zawierający pola wektorowe kończy się niepowodzeniem podczas tworzenia. W takiej sytuacji należy utworzyć nową usługę.

  • Opcjonalnie, aby uruchomić przykład zapytania, który wywołuje semantyczne ponowne korbowanie, usługa wyszukiwania musi być warstwą Podstawowa lub nowszą z włączonym semantycznym rankerem.

  • Opcjonalnie zasób usługi Azure OpenAI z wdrożeniem programu text-embedding-ada-002. Plik źródłowy .rest zawiera opcjonalny krok generowania nowych osadzania tekstu, ale udostępniamy wstępnie wygenerowane osadzanie, aby można było pominąć tę zależność.

Pobieranie plików

Pobierz przykład REST z usługi GitHub, aby wysłać żądania w tym przewodniku Szybki start. Aby uzyskać więcej informacji, zobacz Pobieranie plików z usługi GitHub.

Możesz również uruchomić nowy plik w systemie lokalnym i ręcznie utworzyć żądania, korzystając z instrukcji w tym artykule.

Pobieranie punktu końcowego usługi wyszukiwania

Punkt końcowy usługi wyszukiwania można znaleźć w witrynie Azure Portal.

  1. Zaloguj się do witryny Azure Portal i znajdź usługę wyszukiwania.

  2. Na stronie głównej Przegląd znajdź adres URL. Przykładowy punkt końcowy może wyglądać podobnie jak https://mydemo.search.windows.net.

    Zrzut ekranu przedstawiający właściwość ADRESU URL na stronie przeglądu.

Wklejasz ten punkt końcowy do .rest pliku lub .http w późniejszym kroku.

Konfigurowanie dostępu

Żądania do punktu końcowego wyszukiwania muszą być uwierzytelnione i autoryzowane. W tym zadaniu można użyć kluczy interfejsu API lub ról. Klucze są łatwiejsze do rozpoczęcia od, ale role są bezpieczniejsze.

W przypadku połączenia opartego na rolach poniższe instrukcje zawierają połączenie z usługą Azure AI Search w ramach tożsamości, a nie tożsamością aplikacji klienckiej.

Opcja 1. Używanie kluczy

Wybierz pozycję Klucze ustawień>, a następnie skopiuj klucz administratora. Klucze administracyjne służą do dodawania, modyfikowania i usuwania obiektów. Istnieją dwa zamienne klucze administratora. Skopiuj jedną z nich. Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z usługą Azure AI Search przy użyciu uwierzytelniania klucza.

Zrzut ekranu przedstawiający klucze interfejsu API w witrynie Azure Portal.

Wklejasz ten klucz do .rest pliku lub .http w późniejszym kroku.

Opcja 2. Używanie ról

Upewnij się, że usługa wyszukiwania jest skonfigurowana pod kątem dostępu opartego na rolach. Aby uzyskać dostęp dewelopera, musisz mieć wstępnie skonfigurowane przypisania ról. Przypisania ról muszą udzielać uprawnień do tworzenia, ładowania i wykonywania zapytań względem indeksu wyszukiwania.

W tej sekcji uzyskaj osobisty token tożsamości przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal.

  1. Zaloguj się do interfejsu wiersza polecenia platformy Azure.

    az login
    
  2. Pobierz osobisty token tożsamości.

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

Wklejasz osobisty token tożsamości do .rest pliku lub .http w późniejszym kroku.

Uwaga

W tej sekcji założono, że używasz klienta lokalnego, który łączy się z usługą Azure AI Search w Twoim imieniu. Alternatywną metodą jest uzyskanie tokenu dla aplikacji klienckiej, przy założeniu, że aplikacja jest zarejestrowana w identyfikatorze Microsoft Entra.

Tworzenie indeksu wektorowego

Tworzenie indeksu (REST) tworzy indeks wektorowy i konfiguruje fizyczne struktury danych w usłudze wyszukiwania.

Schemat indeksu jest zorganizowany wokół zawartości hotelowej. Przykładowe dane składają się z nazw wektorów i niewektorów oraz opisów siedmiu fikcyjnych hoteli. Ten schemat obejmuje konfiguracje indeksowania wektorów i zapytań oraz klasyfikacji semantycznej.

  1. Otwórz nowy plik tekstowy w programie Visual Studio Code.

  2. Ustaw zmienne na zebrane wcześniej wartości. W tym przykładzie użyto osobistego tokenu tożsamości.

    @baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
    @token = PUT-YOUR-PERSONAL-IDENTITY-TOKEN-HERE
    
  3. Zapisz plik za pomocą .rest rozszerzenia lub .http .

  4. Wklej poniższy przykład, aby utworzyć hotels-vector-quickstart indeks w usłudze wyszukiwania.

    ### 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. Wybierz pozycję Wyślij wniosek. Pamiętaj, że do wysyłania żądań potrzebny jest klient REST. Powinna zostać wyświetlona HTTP/1.1 201 Created odpowiedź. Treść odpowiedzi powinna zawierać reprezentację JSON schematu indeksu.

    Najważniejsze kwestie:

    • Kolekcja fields zawiera wymagane pole klucza oraz pola tekstowe i wektorowe (takie jak Description i DescriptionVector) do wyszukiwania tekstu i wektora. Kolokowanie wektorów i pól niewektorów w tym samym indeksie umożliwia wykonywanie zapytań hybrydowych. Na przykład można połączyć filtry, wyszukiwanie tekstu z semantycznym rankingiem i wektorami w jedną operację zapytania.
    • Pola wektorowe muszą mieć type: Collection(Edm.Single) dimensions właściwości i .vectorSearchProfile
    • Sekcja vectorSearch jest tablicą przybliżonych konfiguracji i profilów algorytmu najbliższego sąsiada. Obsługiwane algorytmy obejmują hierarchiczny mały świat i wyczerpujący k najbliższy sąsiad. Aby uzyskać więcej informacji, zobacz Ocenianie istotności w wyszukiwaniu wektorów.
    • [Opcjonalnie]: semantic Konfiguracja umożliwia ponowne korbowanie wyników wyszukiwania. Wyniki można ponowić w zapytaniach typu semantic dla pól ciągów określonych w konfiguracji. Aby dowiedzieć się więcej, zobacz Semantic ranking overview (Omówienie klasyfikacji semantycznej).

Przekaż dokumenty

Tworzenie i ładowanie indeksu to oddzielne kroki. W usłudze Azure AI Search indeks zawiera wszystkie dane z możliwością wyszukiwania i zapytania uruchamiane w usłudze wyszukiwania. W przypadku wywołań REST dane są udostępniane jako dokumenty JSON. Użyj interfejsu API REST indeksu dokumentów dla tego zadania.

Identyfikator URI został rozszerzony w celu uwzględnienia docs kolekcji i index operacji.

Ważne

W poniższym przykładzie nie można uruchomić kodu. W celu zapewnienia czytelności wykluczyliśmy wartości wektorów, ponieważ każdy z nich zawiera 1536 osadzania, co jest zbyt długie dla tego artykułu. Jeśli chcesz wypróbować ten krok, skopiuj kod możliwy do uruchomienia z przykładu w witrynie 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"
            ]
        }
    ]
}

Najważniejsze kwestie:

  • Dokumenty w ładunku składają się z pól zdefiniowanych w schemacie indeksu.
  • Pola wektorowe zawierają wartości zmiennoprzecinkowe. Atrybut wymiarów ma co najmniej 2 i maksymalnie 3072 wartości zmiennoprzecinkowe każdy. Ten przewodnik Szybki start ustawia atrybut wymiarów na 1536, ponieważ jest to rozmiar osadzania wygenerowany przez model osadzania w usłudze Azure OpenAI text-embedding-ada-002 .

Uruchamianie zapytań

Teraz, gdy dokumenty są ładowane, można wysyłać zapytania wektorowe względem nich przy użyciu funkcji Dokumenty — wyszukiwanie w wpisie (REST).

Istnieje kilka zapytań do zademonstrowania różnych wzorców:

Zapytania wektorowe w tej sekcji są oparte na dwóch ciągach:

  • Ciąg wyszukiwania: historic hotel walk to restaurants and shopping
  • Ciąg zapytania wektorowego (wektoryzowany do reprezentacji matematycznej): classic lodging near running trails, eateries, retail

Ciąg zapytania wektorowego jest semantycznie podobny do ciągu wyszukiwania, ale zawiera terminy, które nie istnieją w indeksie wyszukiwania. Jeśli wyszukujesz classic lodging near running trails, eateries, retailsłowo kluczowe , wyniki są zerowe. W tym przykładzie pokazano, jak można uzyskać odpowiednie wyniki, nawet jeśli nie ma pasujących terminów.

Ważne

Poniższe przykłady nie są uruchamialnym kodem. W celu zapewnienia czytelności wykluczyliśmy wartości wektorów, ponieważ każda tablica zawiera 1536 osadzania, co jest zbyt długie dla tego artykułu. Jeśli chcesz wypróbować te zapytania, skopiuj kod uruchamiany z przykładu w usłudze GitHub.

  1. Wklej żądanie POST, aby wysłać zapytanie do indeksu wyszukiwania. Następnie wybierz pozycję Wyślij żądanie. Identyfikator URI został rozszerzony w celu uwzględnienia /docs/search operatora.

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

    To zapytanie wektorowe jest skracane w celu zwięzłości. Zawiera vectorQueries.vector wektoryzowany tekst danych wejściowych zapytania, fields określa, które pola wektorowe są przeszukiwane i k określa liczbę najbliższych sąsiadów do zwrócenia.

    Ciąg zapytania wektorowego to classic lodging near running trails, eateries, retail, który jest wektoryzowany do 1536 osadzania dla tego zapytania.

  2. Przejrzyj odpowiedź. Odpowiedź dla wektora równoważnego classic lodging near running trails, eateries, retail zawiera siedem wyników. Każdy wynik zawiera wynik wyszukiwania i pola wymienione w selectpliku . W wyszukiwaniu podobieństwa odpowiedź zawsze zawiera k wyniki uporządkowane według wyniku podobieństwa wartości.

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

Wyszukiwanie jednowektorowe z filtrem

Filtry można dodawać, ale filtry są stosowane do zawartości niewektorowej w indeksie. W tym przykładzie filtr dotyczy Tags pola, aby odfiltrować wszystkie hotele, które nie zapewniają bezpłatnej sieci Wi-Fi.

  1. Wklej żądanie POST, aby wysłać zapytanie do indeksu wyszukiwania.

    ### 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. Przejrzyj odpowiedź. Zapytanie jest takie samo jak w poprzednim przykładzie, ale zawiera filtr wykluczenia po przetworzeniu i zwraca tylko trzy hotele, które mają bezpłatne Wi-Fi.

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

Wyszukiwanie hybrydowe składa się z zapytań słów kluczowych i zapytań wektorowych w jednym żądaniu wyszukiwania. W tym przykładzie zapytanie wektorowe i wyszukiwanie pełnotekstowe są uruchamiane współbieżnie:

  • Ciąg wyszukiwania: historic hotel walk to restaurants and shopping
  • Ciąg zapytania wektorowego (wektoryzowany do reprezentacji matematycznej): classic lodging near running trails, eateries, retail
  1. Wklej żądanie POST, aby wysłać zapytanie do indeksu wyszukiwania. Następnie wybierz pozycję Wyślij żądanie.

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

    Ponieważ jest to zapytanie hybrydowe, wyniki są klasyfikowane przez wzajemne łączenie rangi (RRF). Funkcja RRF ocenia wyniki wyszukiwania wielu wyników wyszukiwania, przyjmuje odwrotność, a następnie scala i sortuje połączone wyniki. Zwracana top jest liczba wyników.

  2. Przejrzyj odpowiedź.

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

    Ponieważ funkcja RRF scala wyniki, pomaga przejrzeć dane wejściowe. Poniższe wyniki pochodzą tylko z zapytania pełnotekstowego. Dwa najlepsze wyniki to Sublime Palace Hotel and History Lion Resort. Hotel Sublime Palace ma silniejszy wynik istotności 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"
                },
    

    W zapytaniu tylko wektorów, które używa HNSW do znajdowania dopasowań, Hotel Sublime Palace spada na czwartą pozycję. Historyczny Lew, który był drugi w wyszukiwaniu pełnotekstowym i trzecim w wyszukiwaniu wektorowym, nie doświadcza tego samego zakresu wahań, więc wydaje się być najlepszym dopasowaniem w zestawie wyników homogenizowanych.

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

Semantyczne wyszukiwanie hybrydowe z filtrem

Oto ostatnie zapytanie w kolekcji. To zapytanie hybrydowe z klasyfikacją semantyczną jest filtrowane, aby pokazać tylko hotele w promieniu 500 kilometrów od Waszyngtonu. Można ustawić vectorFilterMode wartość null, która jest równoważna wartości domyślnej (preFilter dla nowszych indeksów i postFilter starszych).

  1. Wklej żądanie POST, aby wysłać zapytanie do indeksu wyszukiwania. Następnie wybierz pozycję Wyślij żądanie.

    ### 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. Przejrzyj odpowiedź. Odpowiedź to trzy hotele, które są filtrowane według lokalizacji i semantycznie StateProvince ponownie sklasyfikowane w celu podwyższenia poziomu wyników znajdujących się najbliżej zapytania ciągu wyszukiwania (historic hotel walk to restaurants and shopping).

    Swirling Currents Hotel przenosi się teraz na pierwsze miejsce. Bez semantycznego rankingu, Nordick's Valley Motel jest numerem jeden. Dzięki semantycznemu rankingowi modele zrozumienia maszyn rozpoznają, że historic dotyczy "hotelu, w odległości spaceru od restauracji i zakupów".

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

    Najważniejsze kwestie:

    • Wyszukiwanie wektorowe vectors.value jest określane za pośrednictwem właściwości . Wyszukiwanie słów kluczowych jest określane za pośrednictwem search właściwości .
    • W wyszukiwaniu hybrydowym można zintegrować wyszukiwanie wektorów z wyszukiwaniem pełnotekstowym za pomocą słów kluczowych. Filtry, sprawdzanie pisowni i klasyfikacja semantyczna mają zastosowanie tylko do zawartości tekstowej, a nie do wektorów. W tym ostatnim zapytaniu nie ma semantyki answer , ponieważ system nie wyprodukował takiego, który był wystarczająco silny.
    • Rzeczywiste wyniki zawierają więcej szczegółów, w tym semantyczne podpisy i wyróżnienia. Wyniki zostały zmodyfikowane pod kątem czytelności. Aby uzyskać pełną strukturę odpowiedzi, uruchom żądanie w kliencie REST.

Czyszczenie

Jeśli pracujesz w ramach własnej subskrypcji, dobrym pomysłem po zakończeniu projektu jest sprawdzenie, czy dalej potrzebujesz utworzonych zasobów. Uruchomione zasoby mogą generować koszty. Zasoby możesz usuwać pojedynczo lub jako grupę zasobów, usuwając cały zestaw zasobów.

Zasoby można znaleźć w portalu i zarządzać nimi, korzystając z linku Wszystkie zasoby lub Grupy zasobów w okienku po lewej stronie.

Możesz również wypróbować następujące DELETE polecenie:

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

Następne kroki

W następnym kroku zalecamy przejrzenie kodu demonstracyjnego dla języka Python, C# lub JavaScript.