Funkce fulltextového vyhledávání OData ve službě Azure AI Search – search.ismatch a search.ismatchscoring

Azure AI Search podporuje fulltextové vyhledávání v kontextu výrazů filtru OData prostřednictvím search.ismatch funkcí a search.ismatchscoring funkcí. Tyto funkce umožňují kombinovat fulltextové vyhledávání s přísným logickým filtrováním způsoby, které nejsou možné pouze pomocí parametru nejvyšší úrovně search rozhraní API služby Search.

Poznámka:

Funkce search.ismatch jsou search.ismatchscoring podporovány pouze ve filtrech v rozhraní API služby Search. Nejsou podporovány v rozhraních API pro návrhy nebo automatické dokončování .

Syntaxe

Následující formulář EBNF (Extended Backus-Naur Form) definuje gramatiku search.ismatch funkcí 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'"

K dispozici je také interaktivní diagram syntaxe:

search.ismatch

Funkce search.ismatch vyhodnotí fulltextový vyhledávací dotaz jako součást výrazu filtru. Dokumenty, které odpovídají vyhledávacímu dotazu, se vrátí v sadě výsledků. K dispozici jsou následující přetížení této funkce:

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

Parametry jsou definovány v následující tabulce:

Název parametru Typ Popis
search Edm.String Vyhledávací dotaz (v jednoduché nebo úplné syntaxi dotazu Lucene).
searchFields Edm.String Čárkami oddělený seznam prohledávatelných polí pro hledání; ve výchozím nastavení se nastaví na všechna prohledávatelná pole v indexu. Při použití vyhledávání v poli v parametru search přepíší specifikátory pole v dotazu Lucene všechna pole zadaná v tomto parametru.
queryType Edm.String 'simple' nebo 'full'; výchozí hodnota 'simple'je . Určuje, jaký dotazovací jazyk byl použit v parametru search .
searchMode Edm.String 'any' nebo 'all', výchozí hodnota 'any'je . Určuje, jestli se musí některé nebo všechny hledané termíny v parametru search shodovat, aby bylo možné spočítat dokument jako shodu. Při použití logických operátorů Lucene v parametru search budou mít přednost před tímto parametrem.

Všechny výše uvedené parametry jsou ekvivalentní odpovídajícím parametrům požadavku vyhledávání v rozhraní API služby Search.

Funkce search.ismatch vrátí hodnotu typu Edm.Boolean, která umožňuje vytvořit ji s jinými dílčími výrazy filtru pomocí logických logických operátorů.

Poznámka:

Azure AI Search nepodporuje použití search.ismatch výrazů lambda ani search.ismatchscoring uvnitř výrazů lambda. To znamená, že není možné zapisovat filtry nad kolekcemi objektů, které mohou korelovat fulltextové vyhledávání s striktními shodami filtrů na stejném objektu. Další podrobnosti o tomto omezení a příklady najdete v tématu Řešení potíží s filtry kolekcí ve službě Azure AI Search. Podrobnější informace o tom, proč toto omezení existuje, najdete v tématu Vysvětlení filtrů kolekcí ve službě Azure AI Search.

search.ismatchscoring

Funkce search.ismatchscoring , podobně jako funkce search.ismatch , vrátí true dokumenty, které odpovídají fulltextového vyhledávacímu dotazu předaného jako parametr. Rozdíl mezi nimi spočívá v tom, že skóre relevance dokumentů odpovídajících search.ismatchscoring dotazu přispívá k celkovému skóre dokumentu, zatímco v případě search.ismatch, skóre dokumentu se nezmění. Následující přetížení této funkce jsou k dispozici s parametry identickými s parametry search.ismatch:

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

Funkce search.ismatch i search.ismatchscoring funkce lze použít ve stejném výrazu filtru.

Příklady

Najděte dokumenty se slovem "waterfront". Tento filtrovací dotaz je shodný s požadavkem vyhledávání s search=waterfront.

    search.ismatchscoring('waterfront')

Najděte dokumenty se slovem "hostel" a hodnocením větší nebo rovnou 4 nebo dokumenty se slovem "motel" a hodnocením rovnajícím se 5. Všimněte si, že tento požadavek nelze vyjádřit bez search.ismatchscoring funkce.

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

Najděte dokumenty bez slova "luxury".

    not search.ismatch('luxury')

Najděte dokumenty s frází "zobrazení oceánu" nebo hodnocením rovnajícím se 5. Dotaz search.ismatchscoring bude proveden pouze pro pole HotelName a Rooms/Description.

Dokumenty, které odpovídaly pouze druhé klauzuli disjunkce, se vrátí také – hotely s Rating hodnotou 5. Aby bylo jasné, že tyto dokumenty neodpovídají žádné části výrazu se skóre, vrátí se skóre rovno nule.

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

V popisu hotelu najděte dokumenty, kde termíny "hotel" a "airport" jsou ve vzdálenosti 5 slov od sebe a kde se nesmí kouřit alespoň v některých pokojích. Tento dotaz používá úplný dotazovací jazyk Lucene.

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

Vyhledejte dokumenty, které mají slovo začínající písmeny "lux" v poli Popis. Tento dotaz používá vyhledávání předpon v kombinaci s search.ismatch.

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

Další kroky