Создание полнотекстового запроса в службе "Поиск ИИ Azure"

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

Необходимые компоненты

Пример полнотекстового запроса

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

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

Следующий вызов REST API службы поиска POST иллюстрирует запрос с помощью указанных выше упоминание параметров.

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
    "search": "NY +view",
    "queryType": "simple",
    "searchMode": "all",
    "searchFields": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "select": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "top": "10",
    "count": "true"
}

Основные моменты:

  • search задает критерии соответствия, обычно это целые условия или фразы, с операторами или без них. Любое поле, которое атрибутируется как "доступный для поиска" в схеме индекса, является кандидатом для этого параметра.

  • queryType задает средство синтаксического анализа: simple, full. Средство синтаксического анализа простых запросов по умолчанию оптимально для полнотекстового поиска. Полный средство синтаксического анализа запросов Lucene предназначено для расширенных конструкций запросов, таких как регулярные выражения, поиск близкого взаимодействия, нечеткий и дикий карта поиск. Этот параметр также можно задать semantic для семантического ранжирования для расширенного семантического моделирования в ответе запроса.

  • searchMode Указывает, основаны ли совпадения на критерии "все" (благоприятствию точности) или "любой" критерии (благоприятствию) в выражении. Значение по умолчанию — "любой". Если предполагается интенсивное использование логических операторов, что чаще происходит с индексами, которые содержат большие текстовые блоки (поле содержимого или длинные описания), обязательно проверьте работу запросов с параметром searchMode=Any|All, чтобы оценить влияние этой настройки на логический поиск.

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

Параметры, используемые для управления формой возвращаемого ответа:

  • select указывает, какие поля должны возвращаться в ответе. В инструкции select можно использовать только поля, помеченные как "извлекаемые" в индексе.

  • top возвращает указанное в параметре количество документов, лучше всего соответствующих критериям поиска. В этом примере возвращаются только 10 совпадений. Для постраничной работы с результатами можно сочетать параметры "top" (первые N) и "skip" (пропустить). (Параметр "skip" не используется в данном примере).

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

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

Выбор клиента

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

Чтобы вызвать поиск из приложения, используйте клиентские библиотеки Azure.Document.Search в пакетах SDK Azure для .NET, Java, JavaScript и Python.

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

  1. Войдите в портал Azure и найдите службу поиска.

  2. Откройте индексы и выберите индекс.

  3. Индекс открывается на вкладке обозревателя поиска, чтобы вы могли запрашивать сразу. Перейдите в представление JSON, чтобы указать синтаксис запроса.

    Ниже приведено выражение запроса полнотекстового поиска, которое работает для примера индекса Hotels:

       {
           "search": "pool spa +airport",
           "queryType": "simple",
           "searchMode": "any",
           "searchFields": "Description, Tags",
           "select": "HotelName, Description, Tags",
           "top": 10,
           "count": true
       }
    

    На следующем снимках экрана показан запрос и ответ:

    Screenshot of Search Explorer with a full text query.

Выбор типа запроса: simple | full

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

  • Простой синтаксический анализатор понимает простой синтаксис запросов. Это средство синтаксического анализа было выбрано по умолчанию, поскольку оно позволяет быстро и эффективно обрабатывать текстовые запросы. Синтаксис поддерживает стандартные операторы поиска (AND, OR, NOT) для поиска слов и фраз, а также поиск по префиксу (*) (например, “sea*” для “Seattle” и “Seaside”). Общая рекомендация заключается в том, чтобы сначала попробовать выполнить простой синтаксический анализатор, а затем перейти на полный синтаксический анализатор, если для приложения требуется вызов более сложных запросов.

  • Полный синтаксис запроса Lucene, который активируется при добавлении queryType=full в запрос, основан на средстве синтаксического анализа Apache Lucene.

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

Выбор метода запроса

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

Входные данные Взаимодействие
Метод поиска Пользователь вводит термины или фразы в поле поиска с операторами или без нее и нажимает кнопку "Поиск", чтобы отправить запрос. Можно использовать фильтры для одного и того же запроса, но без автозавершения и предложений.
Метод автозавершения Пользователь вводит несколько символов, и запросы инициируются после ввода каждого нового символа. Ответ — это завершенная строка из индекса. Если указана допустимая строка, пользователь нажимает Search (Поиск), чтобы отправить запрос в службу.
Метод предложений Как и при использовании автозавершения, пользователь вводит несколько символов, и создаются добавочные запросы. Ответ в данном случае представляет собой раскрывающийся список соответствующих документов, которые обычно представлены в нескольких уникальных или описательных полях. Если какой-либо из вариантов допустим, пользователь нажимает на него и соответствующий документ возвращается.
Фасетная навигация На странице отображаются навигационные ссылки или пути перехода, ограничивающие область поиска. Структура фасетной навигации создается динамически на основе исходного запроса. Например, search=* для заполнения дерева фасетной навигации, состоящего из каждой возможной категории. Структура фасетной навигации создается на основе ответа на запрос, но также является механизмом для выражения следующего запроса. В справке REST API facets — это параметр запроса операции поиска документов, но он может использоваться и без параметра search.
Метод фильтра Фильтры используются с аспектами для уменьшения количества результатов. Можно также реализовать фильтр за страницей, например, чтобы инициализировать страницу с полями, зависящими от языка. В справке REST API $filter описан как параметр запроса операции поиска документов, но его можно использовать без параметра search.

Влияние атрибутов поля на запросы

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

На снимке экрана портала ниже примера индекса отелей только последние два поля LastRenovationDate и Rating являются sortableобязательными для использования только в предложении"$orderby".

Index definition for the hotel sample

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

Влияние маркеров на запросы

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

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

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

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