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

Stabilna wersja interfejsu API REST 2023-11-01 zależy od rozwiązań zewnętrznych do fragmentowania i osadzania danych. Jeśli chcesz ocenić wbudowane funkcje fragmentowania i wektoryzacji danych (publiczna wersja zapoznawcza), 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 nowsza z włączonym semantycznym rankingiem.

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

Kopiowanie klucza i adresu URL usługi wyszukiwania

Wywołania REST wymagają punktu końcowego usługi wyszukiwania i klucza interfejsu API dla każdego żądania. Te wartości można uzyskać w witrynie Azure Portal.

  1. Zaloguj się w witrynie Azure Portal. Przejdź do strony Przegląd i skopiuj adres URL. Przykładowy punkt końcowy może wyglądać podobnie jak https://mydemo.search.windows.net.

  2. Wybierz pozycję Ustawienia> Klucze i skopiuj klucz administratora. Administracja klucze służą do dodawania, modyfikowania i usuwania obiektów. Istnieją dwa zamienne klucze administratora. Skopiuj jedną z nich.

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

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 punkt końcowy wyszukiwania i klucz interfejsu API, który został zebrany wcześniej.

    @baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
    @apiKey = PUT-YOUR-ADMIN-API-KEY-HERE
    
  3. Zapisz plik z .rest rozszerzeniem pliku.

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

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 open AI osadzania tekstu 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
        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
                }
            ]
        }
    

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

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

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

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

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

    W zapytaniu tylko wektorów, które używa HNSW do znajdowania dopasowań, Sublime Cliff Hotel spada do czwartej pozycji. 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 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"
            }
        ]
    

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

    Hotel Old Carabelle przenosi się teraz na szczyt. Bez semantycznego rankingu hotel Nordick 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": "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"
                }
            }
        ]
    }
    

    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 podpis 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
    api-key: {{apiKey}}

Następne kroki

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