Číst v angličtině

Sdílet prostřednictvím


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.

odata-filter-expr
    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.

odata-filter-expr
    search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5

Najděte dokumenty bez slova "luxury".

odata-filter-expr
    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.

odata-filter-expr
    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.

odata-filter-expr
    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.

odata-filter-expr
    search.ismatch('lux*', 'Description')

Další kroky