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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выбор полей

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

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

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

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

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

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

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

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

Примечание.

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

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

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

  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. Если анализатор указан в поле, он должен быть именованным лексическим анализатором, перечисленным в структуре LexicalAnalyzerName (а не в пользовательском анализаторе).

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

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

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

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

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

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

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

Пример кода

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

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

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