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


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

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

Примечание.

Функции 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
    }
  ]
}

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