Поделиться через


Добавление синонимов в поиске ИИ Azure

В службе поиска сопоставление синонимов связывает эквивалентные термины, расширяя область запроса без необходимости фактически предоставить термин. Например, если предположить, что собака, собака и щенок являются сопоставленными синонимами, то запрос по собачья найдет совпадение в документе, содержащем собаку. Вы можете создать несколько карт синонимов для разных языков, таких как английская и французская версии, или лексиконы, если содержимое содержит технический жаргон, сленг или малопонятную терминологию.

Некоторые ключевые моменты о картах синонимов:

  • Карта синонимов — это ресурс верхнего уровня, который можно создать один раз и использовать во многих индексах.
  • Карта синонимов применяется к строковым полям.
  • Вы можете создавать и назначать карту синонимов в любое время без нарушения индексирования или запросов.
  • Уровень служб задает ограничения на количество карт синонимов, которые можно создать.
  • Служба поиска может иметь несколько карт синонимов, но в индексе определение поля может иметь только одно назначение карты синонимов.

Создание карты синонимов

Карта синонимов состоит из имени, формата и правил, которые функционируют как элементы карты синонимов. Единственный поддерживаемый формат — solr, а формат solr определяет построение правил.

Чтобы создать карту синонимов, сделайте это программным способом. портал Azure не поддерживает определения карты синонимов.

Создание карты синонимов (REST API) используется для создания карты синонимов.

POST /synonymmaps?api-version=2025-09-01
{
    "name": "geo-synonyms",
    "format": "solr",
    "synonyms": "
        USA, United States, United States of America\n
        Washington, Wash., WA => WA\n"
}

Определение правил

Правила сопоставления соответствуют спецификации фильтра синонимов с открытым исходным кодом Apache Solr, описанному в этом документе: SynonymGraphFilter. Формат solr поддерживает два типа правил:

  • эквивалентность (где термины в запросе равноценны)

  • явные сопоставления (где термины сопоставляются с одним явным термином)

Каждое правило разделено новым символом строки (\n). Можно определить до 5000 правил для карты синонимов в службе уровня "Бесплатный" и до 20 000 правил для карты в других уровнях. Каждое правило может содержать до 20 расширений или элементов в правиле. Дополнительные сведения см. в статье Ограничения синонимов.

Парсеры запросов автоматически переводят любые термины в нижний регистр, если они содержат заглавные или смешанные регистры. Чтобы сохранить специальные символы в строке, например запятую или тире, добавьте соответствующие escape-символы при создании карты синонимов.

Правила эквивалентности

Правила для эквивалентных условий разделяются запятыми в рамках одного правила. В первом примере запрос на США расширяется до США OR "Соединенные Штаты" OR "Соединенные Штаты Америки". Обратите внимание, что если вы хотите сопоставить фразу, сам запрос должен быть запросом фразы, заключенным в кавычки.

В случае эквивалентности запрос для собаки расширяется, чтобы также включать щенка и собаку.

{
"format": "solr",
"synonyms": "
    USA, United States, United States of America\n
    dog, puppy, canine\n
    coffee, latte, cup of joe, java\n"
}

Явное сопоставление

Правила для явного сопоставления обозначаются стрелкой =>. При указании последовательности терминов поискового запроса, которая соответствует левой части =>, она заменяется альтернативами справа в момент выполнения запроса.

В явном случае запрос к Вашингтону, Wash или WA перезаписывается как WA, а обработчик запросов ищет совпадения только в термине WA. Явное сопоставление применяется только в указанном направлении и не перезаписывает запрос WA в Вашингтон в этом случае.

{
"format": "solr",
"synonyms": "
    Washington, Wash., WA => WA\n
    California, Calif., CA => CA\n"
}

Экранирование специальных знаков

Синонимы анализируются во время обработки запросов так же, как и любой другой термин запроса, что означает, что правила зарезервированных и специальных символов применяются к терминам в карте синонимов. Список символов, требующих экранирования, зависит от простого синтаксиса и полного синтаксиса:

Чтобы сохранить символы, отбрасываемые анализатором по умолчанию, замените анализатор, сохраняющий их. Можно, например, использовать анализаторы естественного языка Майкрософт, которые сохраняют слова с дефисом, или пользовательский анализатор для более сложных шаблонов. Дополнительные сведения см. в разделе Частичные термины, шаблоны и специальные символы.

Пример ниже показывает, как экранировать символ с помощью обратной косой черты.

{
    "format": "solr",
    "synonyms": "WA\, USA, WA, Washington\n"
}

Поскольку обратный слэш сам по себе является специальным символом в других языках, таких как JSON и C#, вам, вероятно, понадобится его дважды экранировать. Ниже приведен пример в ФОРМАТЕ JSON:

{
    "format":"solr",
    "synonyms": "WA\\, USA, WA, Washington"
}

Управление картами синонимов

Вы можете обновить карту синонимов без нарушения рабочих процессов запросов и индексирования. Однако после добавления карты синонимов для поля, если затем удалить карту синонимов, из-за этого любой запрос, включающий эти поля, завершится ошибкой 404.

Создание, обновление и удаление карты синонимов всегда является операцией целого документа. Не удается обновить или удалить части карты синонимов постепенно. Для обновления даже одного правила требуется перезагрузка.

Назначение синонимов полям

После создания карты синонимов назначьте ее полю в индексе. Чтобы назначить карты синонимов, сделайте это программным способом. портал Azure не поддерживает ассоциации полей карты синонимов.

  • Поле должно быть типом Edm.String или Collection(Edm.String)
  • Поле должно иметь "searchable":true
  • Поле может иметь только одну карту синонимов

Если карта синонимов существует в службе поиска, она используется в следующем запросе без переиндексирования или перестроения.

Чтобы изменить определение поля, используйте индекс создания или обновления (REST API).

PUT /indexes?api-version=2025-09-01
{
    "name":"hotels-sample",
    "fields":[
        {
            "name":"description",
            "type":"Edm.String",
            "searchable":true,
            "synonymMaps":[
            "en-synonyms"
            ]
        },
        {
            "name":"description_fr",
            "type":"Edm.String",
            "searchable":true,
            "analyzer":"fr.microsoft",
            "synonymMaps":[
            "fr-synonyms"
            ]
        }
    ]
}

Запрос с эквивалентным или сопоставленным полем

Назначение поля синонима не изменяет способ написания запросов. После назначения карты синонимов единственное различие заключается в том, что если термин запроса существует в карте синонимов, поисковая система либо расширяет или перезаписывает термин или фразу в зависимости от правила.

Использование синонимов во время выполнения запроса

Синонимы — это метод расширения запросов, который дополняет содержимое индекса эквивалентными условиями. Но он подходит только для полей, которым назначены синонимы. Если запрос, ограниченный полем, исключает поле с поддержкой синонимов, вы не увидите совпадения в таблице синонимов.

Если же поля поддерживают синонимы, синонимы подвергаются тому же текстовому анализу, что и связанное поле. Например, если поле анализируется с помощью стандартного анализатора Lucene, термины синонимов также подвергаются анализу стандартным анализатором Lucene на стадии выполнения запроса. Если вы хотите сохранить знаки препинания (например, точки или тире) в условии-синониме, примените к этому полю анализатор, сохраняющий содержимое.

Внутри функции синонимов перезаписывает исходный запрос синонимами с помощью оператора OR. По этой причине функция выделения совпадений и профиль оценки приравнивают исходный термин к его синонимам.

Синонимы применяются только к текстовым запросам свободной формы и не поддерживаются для фильтров, фасетов, автозаполнения или предложений. Автозавершение и предложения основаны только на исходном термине. Совпадения синонимов не отображаются в результате.

Если у вас есть существующий индекс в среде разработки (непроизводства), поэкспериментируйте с небольшим словарем, чтобы узнать, как добавление синонимов изменяет интерфейс поиска, включая влияние на профили оценки, выделение попаданий и предложения.

Поиск подстановочных знаков

Расширения синонимов не применяются к условиям поиска подстановочных знаков; префиксные, нечеткие и регулярные выражения не расширяются.

Если вам нужно сделать один запрос, который применяет расширение синонимов, подстановочные знаки, регулярные выражения или нечеткий поиск, можно объединить запросы с использованием синтаксиса OR. Например, чтобы объединить синонимы с подстановочными знаками для обеспечения простого синтаксиса запросов, термин будет выглядеть так: <query> | <query>*.

Следующий шаг