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:
Poznámka:
Úplný soubor EBNF najdete v referenčních informacích k syntaxi výrazů OData pro Azure AI Search .
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')