Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функции полнотекстового поиска OData в службе "Поиск
Служба "Поиск ИИ 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
, которое позволяет создать его с другими вложенными выражениями фильтра с помощью логических операторов.
Примечание.
Поиск ИИ 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')
Ниже приведен полный синтаксис запроса для этого запроса, который можно запустить в обозревателе поиска на портале Azure. Выходные данные состоят из совпадений на набережной, воде и фронте.
{
"search": "*",
"select": "HotelId, HotelName, Description",
"searchMode": "all",
"queryType": "simple",
"count": true,
"filter": "search.ismatchscoring('waterfront')"
}
Найдите документы с словом "пул" и рейтингом больше или равно 4, или документы с словом "мотель" и равным 3.2. Обратите внимание, что этот запрос не может быть выражен без search.ismatchscoring
функции.
search.ismatchscoring('pool') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 3.2
Ниже приведен полный синтаксис запроса для этого запроса для обозревателя поиска. Выходные данные состоят из совпадений на отелях с бассейнами с рейтингом больше 4 , или мотелей с рейтингом равным 3,2.
{
"search": "*",
"select": "HotelId, HotelName, Description, Tags, Rating",
"searchMode": "all",
"queryType": "simple",
"count": true,
"filter": "search.ismatchscoring('pool') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 3.2"
}
Найти документы без слова luxury.
not search.ismatch('luxury')
Ниже приведен полный синтаксис запроса для этого запроса. Выходные данные состоят из совпадений по термину роскоши.
{
"search": "*",
"select": "HotelId, HotelName, Description, Tags, Rating",
"searchMode": "all",
"queryType": "simple",
"count": true,
"filter": "not search.ismatch('luxury')"
}
Найдите документы с фразой "океан" или рейтингом, равным 3,2. Запрос search.ismatchscoring
выполняется только для полей HotelName
и Description
.
Ниже приведен полный синтаксис запроса для этого запроса. Документы, соответствующие только второму предложению отсоединения, возвращаются слишком (в частности, отели с Rating
равными 3.2
). Чтобы убедиться, что эти документы не соответствовали ни одной из забитых частей выражения, они возвращаются с оценкой, равной нулю.
{
"search": "*",
"select": "HotelId, HotelName, Description, Rating",
"searchMode": "all",
"queryType": "full",
"count": true,
"filter": "search.ismatchscoring('ocean', 'Description,HotelName') or Rating eq 3.2"
}
Выходные данные состоят из 4 совпадений: отели, которые упоминают "океан" в описании или имени отеля, или отелях с рейтингом 3,2. Обратите внимание, что оценка поиска равна нулю для совпадений во втором предложении.
{
"@odata.count": 4,
"value": [
{
"@search.score": 1.6076145,
"HotelId": "18",
"HotelName": "Ocean Water Resort & Spa",
"Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
"Rating": 4.2
},
{
"@search.score": 1.0594962,
"HotelId": "41",
"HotelName": "Windy Ocean Motel",
"Description": "Oceanfront hotel overlooking the beach features rooms with a private balcony and 2 indoor and outdoor pools. Inspired by the natural beauty of the island, each room includes an original painting of local scenes by the owner. Rooms include a mini fridge, Keurig coffee maker, and flatscreen TV. Various shops and art entertainment are on the boardwalk, just steps away.",
"Rating": 3.5
},
{
"@search.score": 0,
"HotelId": "40",
"HotelName": "Trails End Motel",
"Description": "Only 8 miles from Downtown. On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
"Rating": 3.2
},
{
"@search.score": 0,
"HotelId": "26",
"HotelName": "Planetary Plaza & Suites",
"Description": "Extend Your Stay. Affordable home away from home, with amenities like free Wi-Fi, full kitchen, and convenient laundry service.",
"Rating": 3.2
}
]
}
Найдите документы, где термины "отель" и "аэропорт" находятся в пределах 5 слов друг от друга в описании отеля, и где курение не допускается по крайней мере в некоторых номерах.
search.ismatch('"hotel airport"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)
Ниже приведен полный синтаксис запроса. Чтобы запустить в обозревателе поиска, экранируйте внутренние кавычки с символом обратной косой черты.
{
"search": "*",
"select": "HotelId, HotelName, Description, Tags, Rating",
"searchMode": "all",
"queryType": "simple",
"count": true,
"filter": "search.ismatch('\"hotel airport\"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)"
}
Выходные данные состоят из одного документа, в котором термины "отель" и "аэропорт" находятся в пределах 5 слов. Курение разрешено для нескольких номеров в большинстве отелей, включая один из этих результатов поиска.
{
"@odata.count": 1,
"value": [
{
"@search.score": 1,
"HotelId": "40",
"HotelName": "Trails End Motel",
"Description": "Only 8 miles from Downtown. On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
"Tags": [
"bar",
"free wifi",
"restaurant"
],
"Rating": 3.2
}
]
}
Найти документы, которые содержат в поле "Описание" слово, начинающееся с букв "lux". В этом запросе используется префиксный поиск в сочетании с search.ismatch
.
search.ismatch('lux*', 'Description')
Ниже приведен полный запрос:
{
"search": "*",
"select": "HotelId, HotelName, Description, Tags, Rating",
"searchMode": "all",
"queryType": "simple",
"count": true,
"filter": "search.ismatch('lux*', 'Description')"
}
Выходные данные состоят из следующих совпадений.
{
"@odata.count": 4,
"value": [
{
"@search.score": 1,
"HotelId": "18",
"HotelName": "Ocean Water Resort & Spa",
"Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
"Tags": [
"view",
"pool",
"restaurant"
],
"Rating": 4.2
},
{
"@search.score": 1,
"HotelId": "13",
"HotelName": "Luxury Lion Resort",
"Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium and transportation hubs, we feature the best in convenience and comfort.",
"Tags": [
"bar",
"concierge",
"restaurant"
],
"Rating": 4.1
},
{
"@search.score": 1,
"HotelId": "16",
"HotelName": "Double Sanctuary Resort",
"Description": "5 star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.",
"Tags": [
"view",
"pool",
"restaurant",
"bar",
"continental breakfast"
],
"Rating": 4.2
},
{
"@search.score": 1,
"HotelId": "14",
"HotelName": "Twin Vortex Hotel",
"Description": "New experience in the making. Be the first to experience the luxury of the Twin Vortex. Reserve one of our newly-renovated guest rooms today.",
"Tags": [
"bar",
"restaurant",
"concierge"
],
"Rating": 4.4
}
]
}