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.
Přehled jazyka OData pro
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.
Tento článek poskytuje přehled jazyka výrazů OData, který se používá ve výrazech $filter, $order-by a $select pro vyhledávání klíčových slov ve službě Azure AI Vyhledávač přes číselná a řetězcová pole (nevzájemná).
Jazyk se prezentuje jako "dole nahoru" počínaje nejzásadnějšími prvky. Výrazy OData, které můžete vytvořit v požadavku dotazu, jsou jednoduché až vysoce složité, ale všechny sdílejí společné prvky. Mezi sdílené prvky patří:
- Cesty k polím, které odkazují na konkrétní pole indexu
- Konstanty, které jsou literálními hodnotami určitého datového typu.
Jakmile pochopíte tyto běžné koncepty, můžete pokračovat v syntaxi nejvyšší úrovně pro každý výraz:
- $filter výrazy se vyhodnocují během analýzy dotazů, omezují vyhledávání na konkrétní pole nebo přidávají kritéria shody použitá při prohledávání indexu.
- $orderby výrazy se aplikují jako krok post-processingového zpracování nad sadou výsledků pro seřazení vrácených dokumentů.
- $select výrazy určují, která pole dokumentu jsou zahrnuta do sady výsledků.
Syntaxe těchto výrazů se liší od jednoduché nebo úplné syntaxe dotazu použité v parametru vyhledávání, i když zde existuje určité překrytí v syntaxi pro odkazování na pole.
Příklady v jiných jazycích, jako je Python nebo C#, najdete v příkladech v úložišti azure-search-vector-samples .
Poznámka:
Terminologie ve službě Azure AI Vyhledávač se liší od standardu OData několika způsoby. Čemu říkáme pole ve službě Azure AI Vyhledávač, se v OData nazývá vlastnost a podobně pro cestu k poli a cestu k vlastnosti. Index
Cesty k polím
Následující ebNF (Extended Backus-Naur Form) definuje gramatiku cest polí.
field_path ::= identifier('/'identifier)*
identifier ::= [a-zA-Z_][a-zA-Z_0-9]*
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č .
Cesta k poli se skládá z jednoho nebo více identifikátorů, které jsou odděleny lomítky. Každý identifikátor je posloupnost znaků, která musí začínat písmenem nebo podtržítkem ASCII a obsahovat pouze písmena ASCII, číslice nebo podtržítka. Písmena můžou být velká nebo malá.
Identifikátor může odkazovat buď na název pole, nebo na proměnnou rozsahu v kontextu výrazu kolekce (any nebo all) ve filtru. Proměnná pro rozsah je jako proměnná smyčky, která představuje aktuální prvek kolekce. U složitých kolekcí tato proměnná představuje objekt, což je důvod, proč můžete použít cesty polí k odkazování na podpole proměnné. Toto je analogické tečkové notaci v mnoha programovacích jazycích.
Příklady cest polí jsou uvedeny v následující tabulce:
| Cesta k poli | Popis |
|---|---|
HotelName |
Odkazuje na pole nejvyšší úrovně indexu. |
Address/City |
Odkazuje na City dílčí pole komplexního pole v indexu; Address je typu Edm.ComplexType v tomto příkladu. |
Rooms/Type |
Odkazuje na Type dílčí pole komplexního pole kolekce v indexu; Rooms je typu Collection(Edm.ComplexType) v tomto příkladu. |
Stores/Address/Country |
Odkazuje na dílčí pole Country pole Address komplexního pole kolekce v indexu; Stores je typu Collection(Edm.ComplexType) a Address je typu Edm.ComplexType v tomto příkladu. |
room/Type |
Odkazuje na Type podpole rozsahové proměnné room, například ve výrazu filtru Rooms/any(room: room/Type eq 'deluxe'). |
store/Address/Country |
Odkazuje na Country podpole pole Address pole proměnné rozsahu store, například ve výrazu filtru Stores/any(store: store/Address/Country eq 'Canada'). |
Význam cesty pole se liší v závislosti na kontextu. V filtrech cesta k poli odkazuje na hodnotu jedné instance pole v aktuálním dokumentu. V jiných kontextech, jako jsou $orderby a $select, nebo při poli hledání (fielded search) v úplné syntaxi Lucene, odkazuje cesta pole na samotné pole. Tento rozdíl má určité důsledky pro použití cest polí ve filtrech.
Zvažte cestu pole Address/City. Ve filtru to odkazuje na jedno město pro aktuální dokument, například "San Francisco". Naproti tomu Rooms/Type odkazuje na Type dílčí pole pro mnoho místností (například "standard" pro první místnost, "deluxe" pro druhý pokoj atd.). Vzhledem k tomu Rooms/Type , že neodkazuje na jednu instanci dílčího pole Type, nelze ji použít přímo ve filtru. Místo toho byste k filtrování typu místnosti použili výraz lambda s proměnnou řady, například takto:
Rooms/any(room: room/Type eq 'deluxe')
V tomto příkladu se proměnná rozsahu room objevuje v cestě room/Type pole. Tímto způsobem room/Type odkazuje na typ aktuální místnosti v aktuálním dokumentu. Toto je jedna instance dílčího Type pole, takže ji lze použít přímo ve filtru.
Použití cest k polím
Cesty k polím se používají v mnoha parametrech rozhraní REST API služby Azure AI Vyhledávač. Následující tabulka uvádí všechna místa, kde se dají použít, a všechna omezení jejich použití:
| API | Název parametru | Omezení |
|---|---|---|
| Vytvoření nebo aktualizace indexu | suggesters/sourceFields |
Nic |
| Vytvoření nebo aktualizace indexu | scoringProfiles/text/weights |
Může odkazovat pouze na prohledávatelná pole. |
| Vytvoření nebo aktualizace indexu | scoringProfiles/functions/fieldName |
Může odkazovat pouze na filtrovatelná pole. |
| Vyhledat |
search kdy queryType je full |
Může odkazovat pouze na prohledávatelná pole. |
| Vyhledat | facet |
Může odkazovat pouze na fasetová pole. |
| Vyhledat | highlight |
Může odkazovat pouze na prohledávatelná pole. |
| Vyhledat | searchFields |
Může odkazovat pouze na prohledávatelná pole. |
| Navrhnout a automaticky dokončovat | searchFields |
Může odkazovat pouze na pole, která jsou součástí suggester |
| Hledání, návrhy a automatické dokončování | $filter |
Může odkazovat pouze na filtrovatelná pole. |
| Hledání a návrhy | $orderby |
Může odkazovat pouze na řaditelná pole. |
| Hledání, návrhy a vyhledávání | $select |
Může odkazovat pouze na pole s možností načtení. |
Konstanty
Konstanty v OData jsou literální hodnoty daného typu EDM (Entity Data Model). Seznam podporovaných typů ve službě Azure AI Vyhledávač najdete v tématu Podporované datové typy . Konstanty u typů kolekcí nejsou podporovány.
Následující tabulka uvádí příklady konstant pro každý nevektorový datový typ, který podporuje výrazy OData:
| Datový typ | Ukázkové konstanty |
|---|---|
Edm.Boolean |
true, false |
Edm.DateTimeOffset |
2019-05-06T12:30:05.451Z |
Edm.Double |
3.14159, -1.2e7, NaN, , INF-INF |
Edm.GeographyPoint |
geography'POINT(-122.131577 47.678581)' |
Edm.GeographyPolygon |
geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))' |
Edm.Int32 |
123, -456 |
Edm.Int64 |
283032927235 |
Edm.String |
'hello' |
Odmaskování speciálních znaků v řetězcových konstantách
Řetězcové konstanty v OData jsou oddělené jednoduchými uvozovkami. Pokud potřebujete vytvořit dotaz s řetězcovou konstantou, která by sama mohla obsahovat jednoduché uvozovky, můžete vložené uvozovky escapeovat tak, že je zdvojnásobíte.
Například fráze s neformátovaným apostrofem jako "Alice's car" by byla reprezentována v OData jako řetězcová konstanta 'Alice''s car'.
Důležité
Při programovém vytváření filtrů je důležité pamatovat na escapování řetězcových konstant, které pocházejí ze vstupu uživatele. Tím se zmírňuje možnost injektážních útoků, zejména při použití filtrů k implementaci omezení zabezpečení.
Syntaxe konstant
Následující formulář EBNF (Extended Backus-Naur Form) definuje gramatiku většiny konstant zobrazených v předchozí tabulce. Gramatiku pro geoprostorové typy najdete v geoprostorových funkcích OData ve službě Azure AI Vyhledávač.
constant ::=
string_literal
| date_time_offset_literal
| integer_literal
| float_literal
| boolean_literal
| 'null'
string_literal ::= "'"([^'] | "''")*"'"
date_time_offset_literal ::= date_part'T'time_part time_zone
date_part ::= year'-'month'-'day
time_part ::= hour':'minute(':'second('.'fractional_seconds)?)?
zero_to_fifty_nine ::= [0-5]digit
digit ::= [0-9]
year ::= digit digit digit digit
month ::= '0'[1-9] | '1'[0-2]
day ::= '0'[1-9] | [1-2]digit | '3'[0-1]
hour ::= [0-1]digit | '2'[0-3]
minute ::= zero_to_fifty_nine
second ::= zero_to_fifty_nine
fractional_seconds ::= integer_literal
time_zone ::= 'Z' | sign hour':'minute
sign ::= '+' | '-'
/* In practice integer literals are limited in length to the precision of
the corresponding EDM data type. */
integer_literal ::= digit+
float_literal ::=
sign? whole_part fractional_part? exponent?
| 'NaN'
| '-INF'
| 'INF'
whole_part ::= integer_literal
fractional_part ::= '.'integer_literal
exponent ::= 'e' sign? integer_literal
boolean_literal ::= 'true' | 'false'
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č .
Vytváření výrazů z cest polí a konstant
Cesty polí a konstanty jsou nejzákladnější součástí výrazu OData, ale samy o sobě jsou již úplnými výrazy. Ve skutečnosti je parametr $select ve službě Azure AI Vyhledávač pouze seznamem cest polí odděleným čárkami a $orderby není o moc složitější než $select. Pokud máte pole typu Edm.Boolean v indexu, můžete dokonce napsat filtr, který není nic jiného než cesta k tomuto poli. Konstanty true a false jsou stejně platné filtry.
Je ale častější mít komplexní výrazy, které odkazují na více než jedno pole a konstantu. Tyto výrazy jsou sestaveny různými způsoby v závislosti na parametru.
Následující formulář EBNF (Extended Backus-Naur Form) definuje gramatiku pro parametry $filter, $orderby a $select . Jsou sestavené z jednodušších výrazů, které odkazují na cesty polí a konstanty:
filter_expression ::= boolean_expression
order_by_expression ::= order_by_clause(',' order_by_clause)*
select_expression ::= '*' | field_path(',' field_path)*
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č .
Další kroky
Parametry $orderby a $select jsou seznamy jednodušších výrazů oddělené čárkami. Parametr $filter je logický výraz, který se skládá z jednodušších dílčích výrazů. Tyto dílčí výrazy jsou kombinovány pomocí logických operátorů, jako jsou and, or a not, porovnávací operátory, jako jsou , eq a lt, a operátory kolekce, jako jsou gt a .
Parametry $filter, $orderby a $select jsou podrobněji prozkoumány v následujících článcích: