Настройка средства предложения для автозавершения и предлагаемых совпадений в запросе

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

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

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

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

Visual comparison of autocomplete and suggested queries

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

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

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

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

Создание средства подбора

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

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

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

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

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

Выбор полей

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

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

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

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

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

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

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

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

Примечание.

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

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

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

  1. В определении индекса введите имя для средства подбора.

  2. В каждом определении поля для новых полей установите флажок в столбце Средство подбора. Флажок доступен только для строковых полей.

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

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

Добавьте средства подбора в REST API с помощью функции Создание индекса или Обновление индекса.

{
  "name": "hotels-sample-index",
  "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);
}

Справочные данные по свойствам

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

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

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

Использование средства подбора

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

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

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

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

Пример кода

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

Ознакомление со сведениями о запросах\формулировке.