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


Функции полнотекстового поиска OData в службе "Поиск search.ismatch ИИ Azure" и search.ismatchscoring

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

Примечание.

Функции search.ismatch и search.ismatchscoring поддерживаются только в фильтрах API поиска. Они не поддерживаются в интерфейсах API Предложения или Автозаполнения.

Синтаксис

Следующая EBNF (расширенная форма Бэкуса-Наура) определяет грамматику функций search.ismatch и search.ismatchscoring:

search_is_match_call ::=
    'search.ismatch'('scoring')?'(' search_is_match_parameters ')'

search_is_match_parameters ::=
    string_literal(',' string_literal(',' query_type ',' search_mode)?)?

query_type ::= "'full'" | "'simple'"

search_mode ::= "'any'" | "'all'"

Кроме того, вам может помочь интерактивная схема синтаксиса:

Примечание.

См . справочник по синтаксису выражений OData для поиска ИИ Azure для полного EBNF.

search.ismatch

Функция search.ismatch вычисляет поисковый запрос как часть выражения фильтрации. Документы, соответствующие поисковому запросу, будут возвращены в результирующем наборе. Доступны следующие перегрузки этой функции:

  • search.ismatch(search)
  • search.ismatch(search, searchFields)
  • search.ismatch(search, searchFields, queryType, searchMode)

Определения параметров приведены в следующей таблице:

Наименование параметра Тип Описание
search Edm.String Поисковый запрос (в простом или полном синтаксисе запроса Lucene).
searchFields Edm.String Разделенный запятыми список полей, где вести поиск. По умолчанию это все поля индекса, в которых возможен поиск. При использовании поиска по полям в параметре search описатели полей в запросе Lucene переопределяют все поля, указанные в этом параметре.
queryType Edm.String 'simple' или 'full'; по умолчанию — 'simple'. Указывает, какой язык запроса использовался в параметре search.
searchMode Edm.String 'any' или 'all'; по умолчанию — 'any'. Указывает, учитываются ли отдельные или все условия поиска в параметре search, чтобы документ был засчитан, как соответствующий запросу. При использовании логических операторов Lucene в параметре search, они будут иметь приоритет над этим параметром.

Все вышеперечисленные параметры эквивалентны соответствующим параметрам поискового запроса в API поиска.

Функция search.ismatch возвращает значение типа Edm.Boolean, которое позволяет составить его с другими подвыражениями фильтра с помощью логических операторов Boolean.

Примечание.

Поиск по искусственному интеллекту Azure не поддерживает использование search.ismatch лямбда-выражений или search.ismatchscoring внутри нее. Это значит, что невозможно написать фильтры по коллекциям объектов, которые могут сопоставлять совпадения полнотекстового поиска с совпадениями точного фильтра для одного и того же объекта. Дополнительные сведения об этом ограничении, а также примеры см. в разделе "Устранение неполадок с фильтрами коллекции" в службе "Поиск ИИ Azure". Дополнительные сведения о том, почему это ограничение существует, см. в статье "Общие сведения о фильтрах коллекций" в службе "Поиск ИИ Azure".

search.ismatchscoring

Функция search.ismatchscoring, как и функция search.ismatch, возвращает значение true, если документ соответствует поисковому запросу, переданному в параметре. Разница между ними заключается в том, что оценка релевантности документов, соответствующих запросу функции search.ismatchscoring, будет влиять на общую оценку документа, а в случае функции search.ismatch оценка документа не будет изменена. Следующие перегрузки этой функции доступны с параметрами, идентичными параметрам функции search.ismatch:

  • search.ismatchscoring(search)
  • search.ismatchscoring(search, searchFields)
  • search.ismatchscoring(search, searchFields, queryType, searchMode)

Это означает, что обе функции, search.ismatch и search.ismatchscoring, можно использовать в одном и том же выражении фильтра.

Примеры

Найти документы со словом waterfront. Этот запрос фильтрации идентичен поисковому запросу с search=waterfront:

    search.ismatchscoring('waterfront')

Найти документы со словом hostel и рейтингом, большим или равным 4, или документы со словом motel и рейтингом 5. Обратите внимание, что этот запрос невозможно составить без функции search.ismatchscoring.

    search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5

Найти документы без слова luxury.

    not search.ismatch('luxury')

Найти документы с фразой "ocean view" или рейтингом 5. Запрос search.ismatchscoring будет выполняться только по отношению к полям HotelName и Rooms/Description.

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

    search.ismatchscoring('"ocean view"', 'Rooms/Description,HotelName') or Rating eq 5

Найти документы с описанием отеля, в которых термины "гостиница" и "аэропорт" находятся в пределах 5 слов друг от друга, а также запрещено курение хотя бы в некоторых комнатах. В этом запросе используется полный язык запросов Lucene.

    search.ismatch('"hotel airport"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)

Найти документы, которые содержат в поле "Описание" слово, начинающееся с букв "lux". В этом запросе используется префиксный поиск в сочетании с search.ismatch.

    search.ismatch('lux*', 'Description')

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