Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Синонимы расширяют запрос, сопоставляя термины, которые считаются семантически эквивалентными входным терминам. Например, может потребоваться, чтобы "автомобиль" соответствовал документам, содержащим термины "автомобиль" или "транспортное средство".
В службе "Поиск ИИ Azure" синонимы определяются в карте синонимов с помощью правил сопоставления , которые связывают эквивалентные термины. В этом примере рассматриваются основные шаги по добавлению и использованию синонимов с существующим индексом.
В этом примере вы узнаете, как:
- Создайте карту синонимов с помощью класса SynonymMap.
- Задайте свойство SynonymMapsName в полях, которые должны поддерживать расширение запросов с помощью синонимов.
Вы можете запросить поле с поддержкой синонимов, как обычно. Для доступа к синонимам не требуется дополнительный синтаксис запроса.
Вы можете создать несколько карт синонимов, опубликовать их как ресурс на уровне службы, доступный для любого индекса, а затем ссылаться на один из них на уровне поля. Во время запроса в дополнение к поиску индекса поиск azure AI выполняет поиск в карте синонимов, если он указан в полях, используемых в запросе.
Замечание
Синонимы можно создавать программным способом, но не на портале.
Предпосылки
Требования к учебнику:
Если вы не знакомы с клиентской библиотекой .NET, узнайте, как использовать поиск ИИ Azure в .NET.
Пример кода
Полный исходный код примера приложения, используемого в этом примере, можно найти на сайте GitHub.
Обзор
Запросы «до» и «после» используются для демонстрации значимости синонимов. В этом примере пример приложения выполняет запросы и возвращает результаты в примере индекса hotels, заполненного двумя документами. Во-первых, приложение выполняет поисковые запросы с помощью терминов и фраз, которые не отображаются в индексе. Во-вторых, код включает функцию синонимов, а затем перезаписывает те же запросы, на этот раз возвращая результаты на основе совпадений на карте синонимов.
Следующий код демонстрирует общий поток.
static void Main(string[] args)
{
SearchIndexClient indexClient = CreateSearchIndexClient();
Console.WriteLine("Cleaning up resources...\n");
CleanupResources(indexClient);
Console.WriteLine("Creating index...\n");
CreateHotelsIndex(indexClient);
SearchClient searchClient = indexClient.GetSearchClient("hotels");
Console.WriteLine("Uploading documents...\n");
UploadDocuments(searchClient);
SearchClient searchClientForQueries = CreateSearchClientForQueries();
RunQueriesWithNonExistentTermsInIndex(searchClientForQueries);
Console.WriteLine("Adding synonyms...\n");
UploadSynonyms(indexClient);
Console.WriteLine("Enabling synonyms in the test index...\n");
EnableSynonymsInHotelsIndexSafely(indexClient);
Thread.Sleep(10000); // Wait for the changes to propagate
RunQueriesWithNonExistentTermsInIndex(searchClientForQueries);
Console.WriteLine("Complete. Press any key to end application...\n");
Console.ReadKey();
}
Запросы "До"
В RunQueriesWithNonExistentTermsInIndex выполняются поисковые запросы с терминами "пять звезд", "интернет" и "экономика AND отель".
Запросы по фразам, такие как "пять звезд", должны быть заключены в кавычки, и могут также потребоваться управляющие символы в зависимости от требований клиента.
Console.WriteLine("Search the entire index for the phrase \"five star\":\n");
results = searchClient.Search<Hotel>("\"five star\"", searchOptions);
WriteDocuments(results);
Console.WriteLine("Search the entire index for the term 'internet':\n");
results = searchClient.Search<Hotel>("internet", searchOptions);
WriteDocuments(results);
Console.WriteLine("Search the entire index for the terms 'economy' AND 'hotel':\n");
results = searchClient.Search<Hotel>("economy AND hotel", searchOptions);
WriteDocuments(results);
Ни один из двух индексированных документов не содержит этих терминов, поэтому мы получаем следующие выходные данные из первого RunQueriesWithNonExistentTermsInIndex: ни один документ не соответствует.
Включение синонимов
После выполнения запросов "до" пример кода включает синонимы. Включение синонимов — это двухэтапный процесс. Сначала определите и отправьте правила синонимов. Во-вторых, настройте поля для их использования. Процесс описан в UploadSynonyms и EnableSynonymsInHotelsIndex.
Добавьте карту синонимов в службу поиска. В
UploadSynonymsмы зададим четыре правила в карте синонимов 'desc-synonymmap' и загрузим их в службу.private static void UploadSynonyms(SearchIndexClient indexClient) { var synonymMap = new SynonymMap("desc-synonymmap", "hotel, motel\ninternet,wifi\nfive star=>luxury\neconomy,inexpensive=>budget"); indexClient.CreateOrUpdateSynonymMap(synonymMap); }Настройте поисковые поля для использования карты синонимов в определении индекса. В
AddSynonymMapsToFieldsмы включаем синонимы в двух поляхcategoryиtags, присваивая свойствуSynonymMapNamesимя недавно загруженной карты синонимов.private static SearchIndex AddSynonymMapsToFields(SearchIndex index) { index.Fields.First(f => f.Name == "category").SynonymMapNames.Add("desc-synonymmap"); index.Fields.First(f => f.Name == "tags").SynonymMapNames.Add("desc-synonymmap"); return index; }При добавлении карты синонимов перестроение индексов не требуется. Вы можете добавить карту синонимов в службу, а затем изменить существующие определения полей в любом индексе в любое время, чтобы использовать новую карту синонимов. Это же относится к отключению синонимов для поля. Вы можете установить свойство
SynonymMapNamesв пустой список.index.Fields.First(f => f.Name == "category").SynonymMapNames.Add("desc-synonymmap");
Запросы типа "After"
После отправки карты синонимов и обновления индекса для использования карты синонимов второй RunQueriesWithNonExistentTermsInIndex вызов выводит ответ:
Search the entire index for the phrase "five star":
Name: Fancy Stay Category: Luxury Tags: [pool, view, wifi, concierge]
Search the entire index for the term 'internet':
Name: Fancy Stay Category: Luxury Tags: [pool, view, wifi, concierge]
Search the entire index for the terms 'economy' AND 'hotel':
Name: Roach Motel Category: Budget Tags: [motel, budget]
Первый запрос находит документ из правила five star=>luxury. Второй запрос расширяет поиск, используя internet,wifi, а третий — оба hotel, motel и economy,inexpensive=>budget для поиска документов, которые соответствуют.
Добавление синонимов полностью изменяет интерфейс поиска. В этом примере исходные запросы не возвращали значимые результаты, даже если документы в нашем индексе были релевантными. Включив синонимы, мы можем расширить индекс для включения терминов в общее использование без изменений базовых данных в индексе.
Очистите ресурсы
Самый быстрый способ очистки после примера заключается в удалении группы ресурсов, содержащей службу поиска ИИ Azure. Теперь вы можете удалить группу ресурсов, чтобы окончательно удалить все в ней. На портале имя группы ресурсов находится на странице обзора службы поиска ИИ Azure.