Настройка модуля предложений для автодополнения и предложений в запросе

Примечание.

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

В службе "Поиск по искусственному интеллекту Azure" функция typeahead или "search-as-you-type" включена с помощью средства предложения. Саггестер — это конфигурация в индексе, которая указывает, какие поля следует использовать для заполнения функцией автозавершения и предлагаемых совпадений. Эти поля проходят дополнительную маркеризацию, создавая последовательности префиксов для поддержки совпадений с частичными терминами. Например, предложение, включающее city поле со значением Сиэтла, имеет префикс сочетаний сиа, сиэт, сиэтт и сиэттл для поддержки typeahead.

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

Взаимодействия Typeahead

Typeahead в поиске Azure AI может быть автозаполнением, которое завершает ввод данных для полного термина запроса, или предложениями, которые приглашают перейти к конкретному совпадению. Автозавершение создает запрос. Предложения создают соответствующий документ.

На следующем снимке экрана показано и то, и другое. Автозаполнение предугадывает потенциальный термин, завершая tw на in. Предложения — это мини-результаты поиска, где поле, например hotel name , представляет соответствующий документ поиска отеля из индекса. В рамках предложений можно выделить любое поле, содержащее описательные сведения.

Снимок экрана: визуальное сравнение автозавершения и предлагаемых запросов.

Их можно использовать по отдельности или совместно. Для реализации этих действий в службе "Поиск ИИ Azure" есть компонент индекса и запроса.

  • Добавьте средство подбора в определение поискового индекса. Оставшаяся часть этой статьи посвящена созданию механизма предложений.

  • Вызовите запрос с поддержкой предложения в виде запроса предложения или запроса автозавершения, используя один из API, перечисленных в разделе "Использование предложения".

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

Создание средства предложения

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

  • Используйте только строковые поля.

  • Если строковое поле является частью сложного типа (например, поле "Город" в адресе), включите родительский элемент в путь к полю: "Address/City" (REST, C# и Python) или ["Address"]["City"] (JavaScript).

  • Для поля используйте стандартный анализатор Lucene по умолчанию ("analyzer": null) или анализатор языка (например, "analyzer": "fr.microsoft").

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

Выбор полей

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

Автозаполнение преимуществ от большего пула полей для рисования из-за того, что дополнительное содержимое имеет больше возможностей завершения.

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

Чтобы удовлетворить требования поиска во время ввода, добавьте все поля, необходимые для автозаполнения, но затем используйте select, top, filter и searchFields для управления результатами предложений.

Выбор анализаторов

Выбор анализатора определяет, как поля маркеризируются и префиксируются. Например, для дефисированной строки, такой как контекстно-чувствительная, использование анализатора языка приводит к таким сочетаниям маркеров: контекст, чувствительная, контекстно-чувствительная. Если бы вы использовали стандартный анализатор Lucene, дефисированная строка не существует.

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

Поля, использующие пользовательские анализаторы или встроенные анализаторы (за исключением стандартного Lucene), явно запрещены, чтобы предотвратить плохие результаты.

Примечание.

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

Создание с помощью портала Azure

На портале Azure можно указать средство предложения при выборе команды Добавить индекс.

  1. Выберите "Добавить индекс " и добавьте строковое поле.
  2. Задайте для поля attribution значение Searchable.
  3. Выберите анализатор.
  4. После определения полей выберите параметры автозавершения.
  5. Выберите поля строки для поиска, для которых требуется включить функцию автозаполнения.

Создание с помощью REST

В REST API добавьте суггестеры с помощью Создать индекс.

{
  "name": "hotels-sample",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

Создание с помощью .NET

В C# определите Объект SearchSuggester. Suggesters является коллекцией объекта SearchIndex, но может принимать только один элемент. Добавьте подсказчик в определение индекса.

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

Справочник по свойствам

Свойство Описание
имя Задается в определении подсказчика, но также применяется при запросе автозаполнения или подсказок.
sourceFields Указывается в определении модуля предложений. Это список из одного или нескольких полей в индексе, которые служат источником содержимого для предложений. Поля должны быть типами Edm.String. Если анализатор указан в поле, он должен быть лексическим анализатором с именем, перечисленным в LexicalAnalyzerName (а не пользовательским анализатором).

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

Имя отеля является хорошим кандидатом, потому что оно точно. Поля, которые содержат описания или комментарии, состоящие из нескольких слов, слишком трудны для понимания. Аналогичным образом, повторяющиеся поля, такие как категории и теги, менее эффективны. В примерах мы включаем категорию в любом случае, чтобы продемонстрировать, что можно включить несколько полей.
режим поиска Параметр только для REST, но также видимый в портале Azure. Этот параметр недоступен в пакете SDK для .NET. Он указывает стратегию, используемую для поиска фраз кандидата. В настоящее время поддерживается только режим analyzingInfixMatching, который сейчас соответствует началу термина.

Используйте средство подбора

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

В приложении поиска клиентский код должен использовать библиотеку, например jQuery UI Autocomplete, для сбора частичного запроса и предоставления соответствия. Дополнительные сведения об этой задаче см. в статье Добавление автозавершения или предлагаемых результатов в клиентский код.

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

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2026-04-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Пример кода

Сведения о том, как использовать пакет предложений с открытым исходным кодом для частичного завершения термина в клиентском приложении, см. в разделе "Изучение кода поиска .NET".

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

Дополнительные сведения о формулировке запросов.