Синонимы в службе "Когнитивный поиск Azure"
В службе поиска карты синонимов являются глобальными ресурсами, которые связывают эквивалентные термины, расширяя область запроса без необходимости фактического предоставления этого термина пользователем. Например, предполагая, что "пес", "собака" и "щенок" являются сопоставленными синонимами, запрос с условием "собака" будет соответствовать документу, содержащему слово "пес".
Создание синонимов
Карта синонимов — это ресурс, который можно создать один раз и использовать во многих индексах. Уровень служб определяет, сколько карт синонимов можно создать: от трех карт синонимов для уровней "Бесплатный" и "Базовый" до 20 карт для уровня "Стандартный".
Вы можете создать несколько карт синонимов для разных языков (например, английскую и французскую версии) или лексиконов, если содержимое включает в себя техническую или непонятную терминологию. Несмотря на то, что в службе поиска можно создать несколько карт синонимов, в поле может быть указана только одна из них.
Карта синонимов состоит из имени, формата и правил в виде записей карты синонимов. Единственным поддерживаемым форматом является solr , и формат solr определяет форму правила.
Чтобы создать карту синонимов, необходимо воспользоваться программным способом (портал не поддерживает определения карт синонимов):
-
. Эта ссылка является более описательной. и Добавление синонимов с помощью C#. . . .
Определение правил
Правила сопоставления соответствуют спецификации фильтра синонимов с открытым кодом Apache Solr, описанной в этом документе: SynonymFilter. Формат solr поддерживает правила двух типов:
правила эквивалентности (где условия в запросе равноценны);
явные сопоставления (где до запроса условия сопоставляются с одним явно указанным условием).
Разделителем правил должны служить символы новой строки ( \n ). Можно определить до 5000 правил на карту синонимов в службе уровня "Бесплатный" и до 20 000 правил на карту при выборе других уровней. Каждое правило может иметь до 20 расширений (или элементов правила). Дополнительные сведения см. в статье Ограничения синонимов.
Средства синтаксического анализа запросов приводят к тому, что любые условия в верхнем регистре или смешанном регистре будут заменены условиями в нижнем регистре. Но если вы хотите сохранить в строке специальные знаки, такие как запятая или тире, добавьте соответствующие escape-символы при создании карты синонимов.
Правила эквивалентностиПравила для эквивалентных условий разделяются запятыми в рамках одного правила. В первом примере запрос с USA будет расширен до варианта USA или "United States" , или "United States of America" . Обратите внимание, что если требуется найти совпадение с фразой, сам запрос должен состоять из фразы, заключенной в кавычки.
В случае эквивалентности запрос со словом dog приведет к расширению запроса с включением в него puppy и canine .
Явное сопоставлениеПравила для явного сопоставления обозначаются стрелкой => . При его указании последовательность условий поискового запроса, которая соответствует левой части сопоставления => , будет заменена альтернативами для правой части при совершении запроса.
В случае явного сопоставления запрос слов Washington , Wash. или WA будет перезаписан и заменен запросом слова WA , а обработчик запросов будет искать совпадения только с условием WA . Явное сопоставление применяется только в указанном направлении, и в этом случае запрос со словом WA не будет перезаписан и заменен запросом со словом Washington .
Экранирование специальных знаковВ полнотекстовом поиске синонимы анализируются во время обработки запроса точно так же, как и любые другие термины запроса. Это означает, что правила, относящиеся к зарезервированным и специальным символам, применяются к терминам карты синонимов. Список символов, требующих экранирования, различен в простом и полном синтаксисе:
Помните, если необходимо сохранить символы, которые в противном случае по умолчанию при индексировании будут отброшены анализатором, то его следует заменить на анализатор, сохраняющий их. Можно, например, использовать анализаторы естественного языка Майкрософт, которые сохраняют слова с дефисом, или пользовательский анализатор для более сложных шаблонов. Дополнительные сведения см. в разделе Частично введенные слова, шаблоны и специальные знаки.
Ниже показан пример экранирования символа с помощью обратной косой черты:
Так как сама по себе обратная косая черта является специальным знаком в других языках, таких как JSON и C#, вам, вероятно, потребуется преобразовать ее дважды. Например, код JSON для приведенной выше карты при отправке в REST API будет выглядеть вот так.
Отправка карт синонимов и управление ими
Как упоминалось ранее, карту синонимов можно создать или обновить без ущерба для рабочих нагрузок обработки запросов и индексирования. Карта синонимов — это автономный объект (как индексы или источники данных), и пока он не используется ни одним из полей, обновления не приведут к сбоям при индексировании или обработке запросов. Однако, если после добавления карты синонимов в определение поля удалить ее, любой содержащий рассматриваемые поля запрос завершится ошибкой 404.
Создание, обновление и удаление карты синонимов всегда относится ко всему документу. Это означает, что нельзя постепенно создавать, обновлять или удалять элементы карты синонимов. Для обновления даже одного правила требуется перезагрузка.
Назначение синонимов полям
После отправки карты синонимов можно включить синонимы для полей типа Edm.String или Collection(Edm.String) и полей, где указано "searchable":true . Как уже отмечалось, в определении поля может использоваться только одна карта синонимов.
Запрос с эквивалентным или сопоставленным полем
Добавление синонимов не накладывает новых требований к формированию запроса. Запросы условий и фраз можно направлять так же, как и перед добавлением синонимов. Разница лишь в том, что если условие запроса есть на карте синонимов, обработчик запросов в зависимости от правила либо расширит, либо перезапишет условие или фразу.
Использование синонимов во время выполнения запроса
Синонимы — это метод расширения запросов, который дополняет содержимое индекса эквивалентными условиями. Но он подходит только для полей, которым назначены синонимы. Если запрос по полям исключает поле с поддержкой синонимов, то совпадения с картой синонимов отображаться не будут.
Если же поля поддерживают синонимы, синонимы подвергаются тому же текстовому анализу, что и связанное поле. Например, если поле анализируется с помощью стандартного анализатора Lucene, условия-синонимы также будут обрабатываться стандартным анализатором Lucene во время выполнения запроса. Если вы хотите сохранить знаки препинания (например, точки или тире) в условии-синониме, примените к этому полю анализатор, сохраняющий содержимое.
На внутреннем уровне функция синонимов перезаписывает исходный запрос, добавляя синонимы с оператором OR. По этой причине функция выделения совпадений и профиль повышения считают исходный термин и его синонимы эквивалентными.
Синонимы применяются только к текстовым запросам в свободной форме и не поддерживаются при использовании фильтров, аспектов, автозавершения и предложений. Автозавершение и предложения основываются только на исходном условии. Совпадения с синонимами в ответе не отображаются.
Расширения синонимов не применяются к поисковым терминам с подстановочными знаками. Это также относится к терминам, содержащим префикс, нечеткое условие и регулярное выражение.
Если вам нужно сделать один запрос, который применяет расширение синонимов, подстановочные знаки, регулярные выражения или нечеткий поиск, можно объединить запросы с использованием синтаксиса OR. Например, чтобы объединить синонимы с подстановочными знаками для обеспечения простого синтаксиса запросов, термин будет выглядеть так: <query> | <query>* .
Если у вас есть индекс в среде разработки (не в рабочей среде), поэкспериментируйте с небольшим словарем, чтобы узнать, как добавление синонимов изменяет результаты поиска, включая влияние на профили повышения, выделение совпадений и предложения.