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í .
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 .
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.
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.
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')