Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Funkce OData
Poznámka:
Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.
Běžným scénářem ve výrazech filtru OData je kontrola, jestli se jedno pole v každém dokumentu rovná jedné z mnoha možných hodnot. Takto například některé aplikace implementují zkrácení zabezpečení – kontrolou pole obsahujícího jedno nebo více hlavních ID na seznamu hlavních ID představujících uživatele, který provádí dotaz. Jedním ze způsobů, jak napsat takový dotaz, je použít operátory eq a or.
group_ids/any(g: g eq '123' or g eq '456' or g eq '789')
Existuje však kratší způsob, jak to napsat pomocí search.in funkce:
group_ids/any(g: search.in(g, '123, 456, 789'))
Důležité
Kromě toho, že je kratší a čitelnější, použití search.in také poskytuje výhody výkonu a zabraňuje určitým omezením velikosti filtrů , pokud jsou ve filtru stovky nebo dokonce tisíce hodnot, které se mají zahrnout do filtru. Z tohoto důvodu důrazně doporučujeme použít search.in místo složitější disjunkce výrazů rovnosti.
Poznámka:
Verze 4.01 standardu OData nedávno zavedla in operátor, který má podobné chování jako search.in funkce ve službě Azure AI Vyhledávač. Azure AI Vyhledávač ale tento operátor nepodporuje, takže místo toho musíte funkci použít search.in .
Syntaxe
Následující ebNF (Extended Backus-Naur Form) definuje gramatiku search.in funkce:
search_in_call ::=
'search.in(' variable ',' string_literal(',' string_literal)? ')'
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 Vyhledávač .
Funkce search.in testuje, jestli se dané pole řetězce nebo proměnná oblasti rovná jednomu z daného seznamu hodnot. Rovnost mezi proměnnou a každou hodnotou v seznamu je určena způsobem citlivým na malá a velká písmena, stejně jako u operátoru eq . Výraz jako search.in(myfield, 'a, b, c') je tedy ekvivalentní myfield eq 'a' or myfield eq 'b' or myfield eq 'c'výrazu s tím rozdílem, že search.in přinese mnohem lepší výkon.
Existují dvě přetížení funkce search.in
search.in(variable, valueList)search.in(variable, valueList, delimiters)
Parametry jsou definovány v následující tabulce:
| Název parametru | Typ | Popis |
|---|---|---|
variable |
Edm.String |
Odkaz na pole řetězce (nebo proměnná rozsahu nad polem kolekce řetězců v případě, kdy search.in se používá uvnitř výrazu any nebo all). |
valueList |
Edm.String |
Řetězec obsahující seznam hodnot s oddělovači, které se mají shodovat s parametrem variable .
delimiters Pokud parametr není zadaný, výchozí oddělovače jsou mezera a čárka. |
delimiters |
Edm.String |
Řetězec, ve kterém se každý znak považuje za oddělovač při analýze parametru valueList . Výchozí hodnota tohoto parametru znamená ' ,' , že všechny hodnoty s mezerami a čárkami mezi nimi budou odděleny. Pokud potřebujete použít jiné oddělovače než mezery a čárky, protože hodnoty obsahují tyto znaky, můžete zadat alternativní oddělovače, například '|' v tomto parametru. |
Výkon search.in
Pokud použijete search.in, můžete očekávat dobu odezvy podsekundové, když druhý parametr obsahuje seznam stovek nebo tisíců hodnot. Výslovný limit na počet položek, které můžete předat do search.in, neexistuje, i když jste stále omezeni maximální velikostí požadavku. S rostoucím počtem hodnot se ale latence zvýší.
Příklady
Najděte všechny hotely s názvem rovným buď 'Sea View motel', nebo 'Levný hotel'. Fráze obsahují mezery, což je výchozí oddělovač. Alternativní oddělovač můžete zadat v jednoduchých uvozovkách jako třetí řetězcový parametr:
search.in(HotelName, 'Sea View motel,Budget hotel', ',')
Vyhledejte všechny hotely, jejichž název je buď 'Sea View motel' nebo 'Budget hotel', oddělené znakem '|':
search.in(HotelName, 'Sea View motel|Budget hotel', '|')
Najděte všechny hotely s pokoji, které mají značku "wifi" nebo "tub":
Rooms/any(room: room/Tags/any(tag: search.in(tag, 'wifi, tub')))
Najděte shodu u frází v kolekci, například "vytápěné věšáky na ručníky" nebo "fén je součástí balení" v tagách.
Rooms/any(room: room/Tags/any(tag: search.in(tag, 'heated towel racks,hairdryer included', ','))
Najděte všechny hotely bez značky 'motel' nebo 'cabin':
Tags/all(tag: not search.in(tag, 'motel, cabin'))