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ę wyszukiwania wektorów dla algorytmów tworzących miejsce osadzania i ustawienia definicji pól wektorów, które są oceniane w czasie zapytania. Interfejs API REST 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.
Usługa Azure AI Search w dowolnym regionie i w dowolnej warstwie. Utwórz lub znajdź istniejący zasób usługi Azure AI Search w ramach bieżącej subskrypcji.
- W większości tych przewodników Szybki start możesz użyć warstwy Bezpłatna , ale w przypadku większych plików danych zaleca się użycie warstwy Podstawowa lub nowsza.
- 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.
Pobieranie informacji o zasobie
Żądania do punktu końcowego wyszukiwania muszą być uwierzytelnione i autoryzowane. W tym zadaniu można użyć kluczy interfejsu API lub ról. Zalecamy używanie połączenia bez klucza za pośrednictwem identyfikatora Entra firmy Microsoft.
Wybierz kartę odpowiadającą preferowanej metodzie uwierzytelniania. Użyj tej samej metody dla wszystkich żądań w tym przewodniku Szybki start.
Zaloguj się do witryny Azure Portal i znajdź usługę wyszukiwania.
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
.Wykonaj kroki opisane w przewodniku Szybki start bez kluczy, aby uzyskać token entra firmy Microsoft.
Token otrzymasz po uruchomieniu
az account get-access-token
polecenia w kroku 3 poprzedniego przewodnika Szybki start.az account get-access-token --scope https://search.azure.com/.default --query accessToken --output tsv
Tworzenie lub pobieranie pliku kodu
Użyj jednego .rest
pliku lub .http
, aby uruchomić wszystkie żądania w tym przewodniku Szybki start. Możesz pobrać plik REST zawierający kod tego przewodnika Szybki start lub utworzyć nowy plik w programie Visual Studio Code i skopiować do niego kod.
W programie Visual Studio Code utwórz nowy plik z
.rest
rozszerzeniem lub.http
. Na przykładaz-search-vector-quickstart.rest
. Skopiuj i wklej nieprzetworzona zawartość pliku Azure-Samples/azure-search-rest-samples/blob/main/Quickstart-vectors/az-search-vector-quickstart.rest do tego nowego pliku.W górnej części pliku zastąp wartość symbolu zastępczego adresem
@baseUrl
URL usługi wyszukiwania. Zobacz sekcję Pobieranie informacji o zasobie, aby uzyskać instrukcje dotyczące znajdowania adresu URL usługi wyszukiwania.@baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
W górnej części pliku zastąp wartość symbolu zastępczego uwierzytelniania. Zobacz sekcję Pobieranie informacji o zasobie, aby uzyskać instrukcje dotyczące uzyskiwania tokenu lub klucza interfejsu API firmy Microsoft.
W przypadku zalecanego uwierzytelniania bez klucza za pośrednictwem identyfikatora Entra firmy Microsoft należy zastąpić
@apiKey
zmienną@token
.@token = PUT-YOUR-MICROSOFT-ENTRA-TOKEN-HERE
Jeśli wolisz użyć klucza interfejsu API, zastąp ciąg
@apiKey
kluczem skopiowanym z witryny Azure Portal.@apiKey = PUT-YOUR-ADMIN-KEY-HERE
W przypadku zalecanego uwierzytelniania bez klucza za pośrednictwem identyfikatora Entra firmy Microsoft należy zastąpić
api-key: {{apiKey}}
ciąg ciągiemAuthorization: Bearer {{token}}
w nagłówkach żądania. Zastąp wszystkie wystąpieniaapi-key: {{apiKey}}
, które znajdziesz w pliku.
Tworzenie indeksu wektorowego
Interfejs API REST tworzenia indeksu służy do tworzenia indeksu wektora i konfigurowania fizycznych struktur danych w usłudze wyszukiwania.
Schemat indeksu w tym przykładzie jest zorganizowany wokół zawartości hotelowej. Przykładowe dane składają się z nazw wektorów i niewektorów oraz opisów fikcyjnych hoteli. Ten schemat obejmuje konfiguracje indeksowania wektorów i zapytań oraz klasyfikacji semantycznej.
W programie Visual Studio Code otwórz
az-search-vector-quickstart.rest
utworzony wcześniej plik.### Create a new index
Znajdź blok kodu w pliku. Ten blok zawiera żądanie utworzenia indeksuhotels-vector-quickstart
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": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": false, "facetable": false, "analyzer": "en.microsoft" }, { "name": "Description_frvector", "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": "ParkingIncluded", "type": "Edm.Boolean", "searchable": false, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }, { "name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }, { "name": "Rating", "type": "Edm.Double", "searchable": false, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }, { "name": "Address", "type": "Edm.ComplexType", "fields": [ { "name": "StreetAddress", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": false, "facetable": false }, { "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": "PostalCode", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }, { "name": "Country", "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": "Category" } ] } } ] } }
Wybierz pozycję Wyślij wniosek. Powinna zostać wyświetlona
HTTP/1.1 201 Created
odpowiedź.
Treść odpowiedzi powinna zawierać reprezentację JSON schematu indeksu.
{
"@odata.context": "https://my-demo-search.search.windows.net/$metadata#indexes/$entity",
"@odata.etag": "\"0x8DD2E70E6C36D8E\"",
"name": "hotels-vector-quickstart",
"defaultScoringProfile": null,
"fields": [
{
"name": "HotelId",
"type": "Edm.String",
"searchable": false,
"filterable": true,
"retrievable": true,
"sortable": false,
"facetable": false,
"key": true,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"dimensions": null,
"vectorSearchProfile": null,
"synonymMaps": []
},
[MORE FIELD DEFINITIONS OMITTED FOR BREVITY]
],
"scoringProfiles": [],
"corsOptions": null,
"suggesters": [],
"analyzers": [],
"tokenizers": [],
"tokenFilters": [],
"charFilters": [],
"encryptionKey": null,
"similarity": {
"@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
"k1": null,
"b": null
},
"vectorSearch": {
"algorithms": [
{
"name": "my-hnsw-vector-config-1",
"kind": "hnsw",
"hnswParameters": {
"metric": "cosine",
"m": 4,
"efConstruction": 400,
"efSearch": 500
},
"exhaustiveKnnParameters": null
},
{
"name": "my-hnsw-vector-config-2",
"kind": "hnsw",
"hnswParameters": {
"metric": "euclidean",
"m": 4,
"efConstruction": 400,
"efSearch": 500
},
"exhaustiveKnnParameters": null
},
{
"name": "my-eknn-vector-config",
"kind": "exhaustiveKnn",
"hnswParameters": null,
"exhaustiveKnnParameters": {
"metric": "cosine"
}
}
],
"profiles": [
{
"name": "my-vector-profile",
"algorithm": "my-hnsw-vector-config-1"
}
]
},
"semantic": {
"defaultConfiguration": null,
"configurations": [
{
"name": "my-semantic-config",
"prioritizedFields": {
"titleField": {
"fieldName": "HotelName"
},
"prioritizedContentFields": [
{
"fieldName": "Description"
}
],
"prioritizedKeywordsFields": [
{
"fieldName": "Category"
}
]
}
}
]
}
}
Najważniejsze wnioski dotyczące interfejsu API REST tworzenia indeksu:
Kolekcja
fields
zawiera wymagane pole klucza oraz pola tekstowe i wektorowe (takie jakDescription
iDescriptionVector
) 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.Konfiguracja (opcjonalnie)
semantic
umożliwia ponowne korbowanie wyników wyszukiwania. Wyniki można ponowić w zapytaniach typusemantic
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. Schemat indeksu został utworzony w poprzednim kroku. Teraz musisz załadować dokumenty do indeksu.
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.
W programie Visual Studio Code otwórz
az-search-vector-quickstart.rest
utworzony wcześniej plik.### Upload documents
Znajdź blok kodu w pliku. Ten blok zawiera żądanie przekazania dokumentów do indeksuhotels-vector-quickstart
w usłudze wyszukiwania.### 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" ] } ] }
Ważne
Kod w tym przykładzie nie jest uruchamiany. W celu zwięzłości usunięto kilka znaków lub wierszy. Użyj kodu w
az-search-vector-quickstart.rest
pliku, aby uruchomić żądanie.Wybierz pozycję Wyślij wniosek. Powinna zostać wyświetlona
HTTP/1.1 200 OK
odpowiedź. Treść odpowiedzi powinna zawierać reprezentację JSON dokumentów wyszukiwania.
Najważniejsze wnioski dotyczące żądania interfejsu API REST indeksu :
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).
W następnych sekcjach uruchamiamy zapytania względem indeksu hotels-vector-quickstart
. Zapytania obejmują:
- Wyszukiwanie jednowektorowe
- Wyszukiwanie jednowektorowe z filtrem
- Wyszukiwanie hybrydowe
- Wyszukiwanie hybrydowe semantyczne z filtrem
Przykładowe zapytania wektorowe 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, retail
sł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.
Wyszukiwanie jednowektorowe
W programie Visual Studio Code otwórz
az-search-vector-quickstart.rest
utworzony wcześniej plik.### Run a single vector query
Znajdź blok kodu w pliku. Ten blok zawiera żądanie zapytania względem indeksu wyszukiwania.### Run a single vector 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 ik
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.Ważne
Kod w tym przykładzie nie jest uruchamiany. W celu zwięzłości usunięto kilka znaków lub wierszy. Użyj kodu w
az-search-vector-quickstart.rest
pliku, aby uruchomić żądanie.Wybierz pozycję Wyślij wniosek. Powinna zostać wyświetlona
HTTP/1.1 200 OK
odpowiedź. Treść odpowiedzi powinna zawierać reprezentację JSON wyników wyszukiwania.
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 select
pliku . 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.85773647,
"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.8399132,
"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.83839583,
"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.82543474,
"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.82380104,
"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.8151413,
"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.8133767,
"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\u2019s restaurant services.",
"Category": "Resort and Spa"
}
]
}
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.
W programie Visual Studio Code otwórz
az-search-vector-quickstart.rest
utworzony wcześniej plik.### Run a vector query with a filter
Znajdź blok kodu w pliku. Ten blok zawiera żądanie zapytania względem 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 }, ] }
Ważne
Kod w tym przykładzie nie jest uruchamiany. W celu zwięzłości usunięto kilka znaków lub wierszy. Użyj kodu w
az-search-vector-quickstart.rest
pliku, aby uruchomić żądanie.Wybierz pozycję Wyślij wniosek. Powinna zostać wyświetlona
HTTP/1.1 200 OK
odpowiedź. Treść odpowiedzi powinna zawierać reprezentację JSON wyników wyszukiwania.
Zapytanie było takie samo jak w poprzednim przykładzie wyszukiwania pojedynczego wektora, ale zawiera filtr wykluczeń po przetworzeniu i zwraca tylko trzy hotele, które mają bezpłatne Wi-Fi.
{
"@odata.context": "https://my-demo-search.search.windows.net/indexes('hotels-vector-quickstart')/$metadata#docs(*)",
"@odata.count": 3,
"value": [
{
"@search.score": 0.85773647,
"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",
"Tags": [
"continental breakfast",
"air conditioning",
"free wifi"
]
},
{
"@search.score": 0.83839583,
"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",
"Tags": [
"view",
"free wifi",
"pool"
]
},
{
"@search.score": 0.8151413,
"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",
"Tags": [
"pool",
"free wifi",
"air conditioning",
"concierge"
]
}
]
}
Wyszukiwanie hybrydowe
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
W programie Visual Studio Code otwórz
az-search-vector-quickstart.rest
utworzony wcześniej plik.### Run a hybrid query
Znajdź blok kodu w pliku. Ten blok zawiera żądanie zapytania względem indeksu wyszukiwania.### 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 } ] }
Ważne
Kod w tym przykładzie nie jest uruchamiany. W celu zwięzłości usunięto kilka znaków lub wierszy. Użyj kodu w
az-search-vector-quickstart.rest
pliku, aby uruchomić żądanie.Wybierz pozycję Wyślij wniosek. Powinna zostać wyświetlona
HTTP/1.1 200 OK
odpowiedź. Treść odpowiedzi powinna zawierać reprezentację JSON wyników wyszukiwania.
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.
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).
W programie Visual Studio Code otwórz
az-search-vector-quickstart.rest
utworzony wcześniej plik.### Run a hybrid query with semantic reranking
Znajdź blok kodu w pliku. Ten blok zawiera żądanie zapytania względem indeksu wyszukiwania.### Run a hybrid query with semantic reranking 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 } ] }
Ważne
Kod w tym przykładzie nie jest uruchamiany. W celu zwięzłości usunięto kilka znaków lub wierszy. Użyj kodu w
az-search-vector-quickstart.rest
pliku, aby uruchomić żądanie.Wybierz pozycję Wyślij wniosek. Powinna zostać wyświetlona
HTTP/1.1 200 OK
odpowiedź. Treść odpowiedzi powinna zawierać reprezentację JSON wyników wyszukiwania.
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.context": "https://my-demo-search.search.windows.net/indexes('hotels-vector-quickstart')/$metadata#docs(*)",
"@odata.count": 2,
"@search.facets": {
"Address/StateProvince": [
{
"count": 1,
"value": "VA"
}
]
},
"@search.answers": [],
"value": [
{
"@search.score": 0.03306011110544205,
"@search.rerankerScore": 2.8773112297058105,
"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.1703834533691406,
"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
}
}
]
}
Najważniejsze wnioski dotyczące dokumentów — interfejs API REST wyszukiwania postów :
Wyszukiwanie wektorowe
vectors.value
jest określane za pośrednictwem właściwości . Wyszukiwanie słów kluczowych jest określane za pośrednictwemsearch
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 witrynie Azure Portal i zarządzać nimi, korzystając z linku Wszystkie zasoby lub Grupy zasobów w okienku po lewej stronie.
Jeśli chcesz zachować usługę wyszukiwania, ale usunąć indeks i dokumenty, możesz użyć DELETE
polecenia w kliencie REST. To polecenie (na końcu az-search-vector-quickstart.rest
pliku) usuwa hotels-vector-quickstart
indeks:
### 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, aby dowiedzieć się, jak wywoływać wywołania interfejsu API REST bez kluczy interfejsu API.
Możesz również przejrzeć kod demonstracyjny dla języka Python, C# lub JavaScript.