Краткое руководство. Поиск вектора с помощью REST
Узнайте, как использовать ИНТЕРФЕЙСы REST API поиска для создания, загрузки и запроса в службе поиска ИИ Azure.
В службе "Поиск ИИ Azure" векторное хранилище содержит схему индекса, которая определяет поля векторов и невекторов, конфигурацию векторного поиска для алгоритмов, создающих пространство внедрения и параметры определений векторных полей, которые вычисляются во время запроса. REST API создания индекса создает хранилище векторов.
Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Примечание.
В этом кратком руководстве описывается шаг векторизации и предоставляется внедрение в примеры документов. Если вы хотите добавить встроенные блоки данных и векторизацию по собственному содержимому, попробуйте мастер импорта и векторизации данных для сквозного пошагового руководства.
Необходимые компоненты
Visual Studio Code с клиентом REST.
Поиск ИИ Azure в любом регионе и на любом уровне. Создайте или найдите существующий ресурс поиска ИИ Azure в текущей подписке.
- Уровень "Бесплатный" можно использовать для большинства из этого краткого руководства, но для больших файлов данных рекомендуется использовать базовый или более высокий уровень.
- Чтобы запустить пример запроса, который вызывает семантические повторения, служба поиска должна быть базовой или более поздней, с поддержкой семантического рангера.
Получение сведений о ресурсе
Запросы к конечной точке поиска должны проходить проверку подлинности и авторизованы. Для этой задачи можно использовать ключи ИЛИ роли API. Рекомендуется использовать бессерверное подключение с помощью идентификатора Microsoft Entra.
Выберите вкладку, соответствующую предпочтительному методу проверки подлинности. Используйте один и тот же метод для всех запросов в этом кратком руководстве.
Войдите в портал Azure и найдите службу поиска.
На домашней странице обзора найдите URL-адрес. Пример конечной точки может выглядеть так:
https://mydemo.search.windows.net
.Выполните действия, описанные в кратком руководстве без ключа, чтобы получить маркер Microsoft Entra.
Вы получите маркер при выполнении
az account get-access-token
команды на шаге 3 предыдущего краткого руководства.az account get-access-token --scope https://search.azure.com/.default --query accessToken --output tsv
Создание или скачивание файла кода
Для выполнения всех запросов в этом кратком руководстве используется один .rest
или .http
файл. Вы можете скачать REST-файл, содержащий код для этого краткого руководства, или создать новый файл в Visual Studio Code и скопировать его в него.
В Visual Studio Code создайте файл с расширением или
.http
расширением.rest
. Например,az-search-vector-quickstart.rest
. Скопируйте и вставьте необработанное содержимое файла Azure-Samples/azure-search-rest-samples/blob/main/Quickstart-vectors/az-search-vector-quickstart.rest file в этот новый файл.В верхней части файла замените значение
@baseUrl
заполнителя URL-адресом службы поиска. Инструкции по поиску URL-адреса службы поиска см. в разделе "Получение сведений о ресурсе".@baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
В верхней части файла замените значение заполнителя для проверки подлинности. Инструкции по получению маркера Microsoft Entra или ключа API см. в разделе "Получение сведений о ресурсе".
Для рекомендуемой проверки подлинности без ключа с помощью идентификатора Microsoft Entra необходимо заменить
@apiKey
переменной@token
.@token = PUT-YOUR-MICROSOFT-ENTRA-TOKEN-HERE
Если вы предпочитаете использовать ключ API, замените
@apiKey
его ключом, скопированным из портал Azure.@apiKey = PUT-YOUR-ADMIN-KEY-HERE
Для рекомендуемой проверки подлинности без ключа с помощью идентификатора Microsoft Entra необходимо заменить
api-key: {{apiKey}}
наAuthorization: Bearer {{token}}
заголовки запроса. Замените все экземплярыapi-key: {{apiKey}}
, которые находятся в файле.
Создание векторного индекса
С помощью REST API создания индекса можно создать векторный индекс и настроить структуры физических данных в службе поиска.
Схема индекса в этом примере организована вокруг содержимого отеля. Пример данных состоит из векторных и невекторных имен и описаний вымышленных отелей. Эта схема включает конфигурации для индексирования векторов и запросов, а также для семантического ранжирования.
В Visual Studio Code откройте
az-search-vector-quickstart.rest
созданный ранее файл.### Create a new index
Найдите блок кода в файле. Этот блок содержит запрос на созданиеhotels-vector-quickstart
индекса в службе поиска.### 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" } ] } } ] } }
Щелкните Отправить запрос. У вас должен быть
HTTP/1.1 201 Created
ответ.
Текст ответа должен содержать представление JSON схемы индекса.
{
"@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"
}
]
}
}
]
}
}
Основные сведения о REST API создания индекса :
Коллекция
fields
содержит обязательные ключевые поля и текстовые и векторные поля (напримерDescription
, иDescriptionVector
) для поиска текста и вектора. Совместное размещение полей вектора и невектора в том же индексе позволяет выполнять гибридные запросы. Например, можно объединить фильтры, текстовый поиск с семантическим ранжированием и векторы в одну операцию запроса.Поля векторов должны быть
type: Collection(Edm.Single)
со свойствамиdimensions
иvectorSearchProfile
свойствами.Этот
vectorSearch
раздел представляет собой массив приблизительных конфигураций и профилей ближайших соседних алгоритмов. Поддерживаемые алгоритмы включают иерархический навигацию по небольшому миру и исчерпывающий k-ближайший сосед. Дополнительные сведения см. в разделе оценки релевантности в векторном поиске.Конфигурация (необязательно)
semantic
позволяет повторно использовать результаты поиска. Вы можете повторно выполнять запросы типаsemantic
для строковых полей, указанных в конфигурации. Дополнительные сведения см. в обзоре семантического ранжирования.
Отправить документы
Создание и загрузка индекса являются отдельными шагами. На предыдущем шаге вы создали схему индекса. Теперь необходимо загрузить документы в индекс.
В службе поиска ИИ Azure индекс содержит все данные, доступные для поиска, и запросы, выполняемые в службе поиска. Для вызовов REST данные предоставляются в виде документов JSON. Используйте REST API индексов для этой задачи. Универсальный код ресурса (URI) расширен для включения docs
коллекции и index
операции.
В Visual Studio Code откройте
az-search-vector-quickstart.rest
созданный ранее файл.### Upload documents
Найдите блок кода в файле. Этот блок содержит запрос на отправку документов вhotels-vector-quickstart
индекс в службе поиска.### 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" ] } ] }
Внимание
Код в этом примере не выполняется. Для краткости удаляются несколько символов или строк. Используйте код в
az-search-vector-quickstart.rest
файле для выполнения запроса.Щелкните Отправить запрос. У вас должен быть
HTTP/1.1 200 OK
ответ. Текст ответа должен содержать представление JSON документов поиска.
Ключи выноски о запросе REST API для документов:
Документы в полезных данных состоят из полей, определенных в схеме индекса.
Векторные поля содержат значения с плавающей запятой. Атрибут измерений имеет не менее 2 и не более 3072 значений с плавающей запятой. В этом кратком руководстве атрибут измерений присваивается значение 1536, так как это размер внедрения, созданных моделью Azure OpenAI text-embedding-ada-002 .
Выполнение запросов
Теперь, когда документы загружены, вы можете выдавать векторные запросы к ним с помощью документов — post (REST).
В следующих разделах мы запускаем запросы к индексу hotels-vector-quickstart
. К запросам относятся:
- Поиск одного вектора
- Поиск одного вектора с фильтром
- Гибридный поиск
- Семантический гибридный поиск с фильтром
Примеры векторных запросов основаны на двух строках:
- Строка поиска:
historic hotel walk to restaurants and shopping
- Строка векторного запроса (векторизованная в математическое представление):
classic lodging near running trails, eateries, retail
Строка векторного запроса семантически похожа на строку поиска, но она содержит термины, которые не существуют в индексе поиска. Если вы выполняете поиск classic lodging near running trails, eateries, retail
по ключевому слову, результаты равны нулю. В этом примере показано, как можно получить соответствующие результаты, даже если нет подходящих условий.
Поиск одного вектора
В Visual Studio Code откройте
az-search-vector-quickstart.rest
созданный ранее файл.### Run a single vector query
Найдите блок кода в файле. Этот блок содержит запрос на запрос к индексу поиска.### 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 } ] }
Этот векторный запрос сокращен для краткости. Содержит
vectorQueries.vector
векторный текст входных данных запроса,fields
определяет, какие поля векторов выполняются поиск, аk
также указывает число ближайших соседей, возвращаемых.Строка векторного запроса ,
classic lodging near running trails, eateries, retail
которая векторизирована в 1536 внедрения для этого запроса.Внимание
Код в этом примере не выполняется. Для краткости удаляются несколько символов или строк. Используйте код в
az-search-vector-quickstart.rest
файле для выполнения запроса.Щелкните Отправить запрос. У вас должен быть
HTTP/1.1 200 OK
ответ. Текст ответа должен содержать представление результатов поиска в формате JSON.
Ответ для векторного эквивалента classic lodging near running trails, eateries, retail
включает семь результатов. Каждый результат предоставляет оценку поиска и поля, перечисленные в select
. В поиске сходства ответ всегда содержит k
результаты, упорядоченные по оценке сходства значений.
{
"@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"
}
]
}
Поиск одного вектора с фильтром
Вы можете добавить фильтры, но фильтры применяются к содержимому невектора в индексе. В этом примере фильтр применяется к Tags
полю для фильтрации всех отелей, которые не предоставляют бесплатный Wi-Fi.
В Visual Studio Code откройте
az-search-vector-quickstart.rest
созданный ранее файл.### Run a vector query with a filter
Найдите блок кода в файле. Этот блок содержит запрос на запрос к индексу поиска.### 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 }, ] }
Внимание
Код в этом примере не выполняется. Для краткости удаляются несколько символов или строк. Используйте код в
az-search-vector-quickstart.rest
файле для выполнения запроса.Щелкните Отправить запрос. У вас должен быть
HTTP/1.1 200 OK
ответ. Текст ответа должен содержать представление результатов поиска в формате JSON.
Запрос был таким же, как и в предыдущем примере поиска с одним вектором, но он включает фильтр исключения после обработки и возвращает только три отеля с бесплатным 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"
]
}
]
}
Гибридный поиск
Гибридный поиск состоит из ключевых запросов и векторных запросов в одном запросе поиска. В этом примере выполняется векторный запрос и полнотекстовый поиск одновременно:
- Строка поиска:
historic hotel walk to restaurants and shopping
- Строка векторного запроса (векторизованная в математическое представление):
classic lodging near running trails, eateries, retail
В Visual Studio Code откройте
az-search-vector-quickstart.rest
созданный ранее файл.### Run a hybrid query
Найдите блок кода в файле. Этот блок содержит запрос на запрос к индексу поиска.### 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 } ] }
Внимание
Код в этом примере не выполняется. Для краткости удаляются несколько символов или строк. Используйте код в
az-search-vector-quickstart.rest
файле для выполнения запроса.Щелкните Отправить запрос. У вас должен быть
HTTP/1.1 200 OK
ответ. Текст ответа должен содержать представление результатов поиска в формате JSON.
Так как это гибридный запрос, результаты ранжируются по RRF. RRF оценивает оценки поиска нескольких результатов поиска, принимает обратное, а затем объединяет и сортирует объединенные результаты. Возвращается top
количество результатов.
Просмотрите ответ:
{
"@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."
}
]
}
Так как RRF объединяет результаты, он помогает просматривать входные данные. Ниже приведены результаты только полнотекстового запроса. Лучшие два результата : Отель Sublime Palace и History Lion Resort. Отель Sublime Palace имеет более сильную оценку релевантности 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"
},
В запросе только для вектора, который использует HNSW для поиска совпадений, отель Sublime Palace удаляется на четвертую позицию. Исторический лев, который был вторым в полнотекстовом поиске и третьем в векторном поиске, не имеет того же диапазона колебания, поэтому он отображается в качестве верхнего совпадения в однородном результирующем наборе.
"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"
}
]
Семантический гибридный поиск с фильтром
Ниже приведен последний запрос в коллекции. Этот гибридный запрос с семантической ранжированием фильтруется, чтобы показать только отели в радиусе 500 километров от Вашингтона. Можно задать vectorFilterMode
значение NULL, что эквивалентно умолчанию (preFilter
для более новых индексов и postFilter
для старых).
В Visual Studio Code откройте
az-search-vector-quickstart.rest
созданный ранее файл.### Run a hybrid query with semantic reranking
Найдите блок кода в файле. Этот блок содержит запрос на запрос к индексу поиска.### 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 } ] }
Внимание
Код в этом примере не выполняется. Для краткости удаляются несколько символов или строк. Используйте код в
az-search-vector-quickstart.rest
файле для выполнения запроса.Щелкните Отправить запрос. У вас должен быть
HTTP/1.1 200 OK
ответ. Текст ответа должен содержать представление результатов поиска в формате JSON.
Проверьте ответ. Ответ равен трем отелям, которые фильтруются по расположению и семантически StateProvince
переназначаются для повышения результатов, которые ближе всего к запросу строки поиска (historic hotel walk to restaurants and shopping
).
Отель Swirling Currents теперь движется в верхней точке. Без семантического ранжирования, мотель в долине Нордик является номером один. С семантического ранжирования модели машинного понимания признают, что historic
относится к "отель, в пределах ходьбы от столовой (ресторанов) и покупок".
{
"@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
}
}
]
}
Ключевые выносы о документах — REST API для поиска после публикации :
Поиск вектора
vectors.value
определяется с помощью свойства. Поиск по ключевому словуsearch
определяется с помощью свойства.В гибридном поиске можно интегрировать векторный поиск с полнотекстовый поиск по ключевым словам. Фильтры, проверка орфографии и семантический ранжирование применяются только к текстовому содержимому, а не к векторам. В этом окончательном запросе нет семантики
answer
, так как система не получила достаточно сильного.Фактические результаты включают более подробные сведения, включая семантические субтитры и выделения. Результаты были изменены для удобства чтения. Чтобы получить полную структуру ответа, выполните запрос в клиенте REST.
Очистка
Если вы работаете в собственной подписке, в конце проекта следует решить, нужны ли вам созданные ресурсы. Ресурсы, которые продолжат работать, могут быть платными. Вы можете удалить ресурсы по отдельности либо удалить всю группу ресурсов.
Ресурсы и управление ими можно найти в портал Azure с помощью ссылки "Все ресурсы" или "Группы ресурсов" в левой области.
Если вы хотите сохранить службу поиска, но удалить индекс и документы, можно использовать DELETE
команду в клиенте REST. Эта команда (в конце az-search-vector-quickstart.rest
файла) удаляет hotels-vector-quickstart
индекс:
### Delete an index
DELETE {{baseUrl}}/indexes/hotels-vector-quickstart?api-version=2023-11-01 HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
Следующие шаги
На следующем шаге мы рекомендуем научиться вызывать вызовы REST API без ключей API.
Вы также можете просмотреть демонстрационный код для Python, C#или JavaScript.