Функции полнотекстового поиска 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')