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

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

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

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

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

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

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

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-07-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 задает критерии соответствия, обычно это целые условия или фразы, с операторами или без них. На соответствие содержимому этого параметра проверяются все поля, у которых в схеме индекса задан атрибут searchable (допускает поиск).

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

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

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

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

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

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

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

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

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

Для раннего разработки и проверки концепции начните с портал 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
       }
    

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

    Снимок экрана: обозреватель поиска с полным текстом запроса.

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

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

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

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

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

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

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

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

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

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

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

Снимок экрана: определение индекса для примера отеля.

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

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

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

Ключевой точкой является то, что вы думаете, что ваш индекс содержит, и то, что на самом деле в нем, может отличаться. Если запросы не возвращают ожидаемые результаты, можно проверить маркеры, созданные анализатором , с помощью REST API анализа. Дополнительные сведения о маркеризации и влиянии на запросы см. в разделе "Частичный поиск терминов" и "шаблоны" со специальными символами.

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