Создание индекса для нескольких языков в службе "Поиск ИИ Azure"

Примечание.

Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.

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

Поиск ИИ Azure поддерживает анализаторы Microsoft и Lucene. По умолчанию поисковая система использует Standard Lucene, которая не зависит от конкретного языка. Если тестирование указывает, что анализатор по умолчанию недостаточен, замените его анализатором языка.

В поиске ИИ Azure два шаблона для поддержки нескольких языков включают:

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

  • Создайте смешанный индекс с отдельными языковыми версиями каждого поля (например, description_en, description_fr, description_ko), а затем ограничьте полнотекстовый поиск только по этим полям в момент выполнения запроса. Этот подход полезен для сценариев, когда языковые варианты требуются только в нескольких полях, например описание.

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

  • Определите строковое поле для каждого варианта языка.
  • Задайте анализатор языка для каждого поля.
  • При запросе задайте параметр searchFields для определённых полей, а затем используйте select для возврата только тех полей, содержащих совместимое содержимое.

Примечание.

Если вы используете большие языковые модели в шаблоне с дополненной генерацией (RAG), можно настроить запрос на возврат переведенных строк. Этот сценарий выходит за рамки этой статьи.

Предварительные требования

Анализ языка применяется к полям типа Edm.String, которые являются searchable и содержат локализованный текст. Если вам также нужен перевод текста, ознакомьтесь со следующим разделом, чтобы узнать, соответствует ли обогащение ИИ вашим потребностям.

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

Добавление перевода текста

В этой статье предполагается, что переведенные строки уже существуют. Если это не так, вы можете подключить инструменты Foundry к конвейеру обогащения, запуская перевод текста во время индексирования. Перевод текста зависит от функции индексатора и средств Foundry, но все настройки выполняются в службе "Поиск ИИ Azure".

Чтобы добавить перевод текста, выполните следующие действия.

  1. Убедитесь, что содержимое находится в поддерживаемом источнике данных.

  2. Создайте источник данных, указывающий на содержимое.

  3. Создайте набор навыков, включающий навык перевода текста.

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

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

  5. Подключите ресурс Microsoft Foundry к вашему набору навыков.

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

Определение полей для содержимого на разных языках

В службе "Поиск ИИ Azure" запросы предназначены для одного индекса. Разработчики, которые хотят предоставить строки для конкретного языка в одном интерфейсе поиска, обычно определяют одно выделенное поле на язык для хранения значений, например одно поле для английских строк и одно поле для французских строк.

Свойство analyzer определения поля используется для задания анализатора языка. Он используется как для индексирования, так и для выполнения запросов.

{
  "name": "hotels-sample",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft"
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft"
    }
  ]
}

Построение и загрузка индекса

Промежуточный шаг — создание и заполнение индекса перед созданием запроса. Здесь мы упомянем этот шаг для полноты картины. Один из способов определения доступности индекса — проверка списка индексов на портале.

Ограничение запроса и усечение результатов

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

Параметры Цель
searchFields Ограничивает полнотекстовый поиск списком именованных полей.
select Обрезает ответ, включая только указанные поля. По умолчанию возвращаются все извлекаемые поля. Параметр select позволяет выбрать, какие элементы будут возвращены.

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

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

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

Пример с использованием REST

POST https://[service name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2026-04-01
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": true
}

Пример кода на C#

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

Увеличение возможностей полей для определённого языка

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

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

Затем вы включите профиль оценки в поисковый запрос:

POST /indexes/hotels/docs/search?api-version=2026-04-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": true
}

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