Operátory kolekce OData ve službě Azure AI Vyhledávač – any a all

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.

Při psaní výrazu filtru OData, který se má použít se službou Azure AI Vyhledávač, je často užitečné filtrovat podle polí kolekce. Toho můžete dosáhnout pomocí any operátorů a all operátorů.

Syntaxe

Následující formulář EBNF (Extended Backus-Naur Form) definuje gramatiku výrazu OData, který používá any nebo all.

collection_filter_expression ::=
    field_path'/all(' lambda_expression ')'
    | field_path'/any(' lambda_expression ')'
    | field_path'/any()'

lambda_expression ::= identifier ':' boolean_expression

K dispozici je také interaktivní diagram syntaxe:

Existují tři formy výrazů, které filtrují kolekce.

  • První dvě zpracovávají kolekci, uplatňují na každý prvek kolekce predikát zadaný ve formě lambda výrazu.
    • Výraz, který používá all , vrátí true , pokud je predikát pravdivý pro každý prvek kolekce.
    • Výraz, který používá any , vrátí true , pokud je predikát pravdivý pro alespoň jeden prvek kolekce.
  • Třetí forma filtru kolekce používá any bez výrazu lambda k otestování, zda je pole kolekce prázdné. Pokud kolekce obsahuje nějaké prvky, vrátí true. Pokud je kolekce prázdná, vrátí hodnotu false.

Výraz lambda ve filtru kolekce je jako tělo smyčky v programovacím jazyce. Definuje proměnnou, která se nazývá proměnná rozsahu, která obsahuje aktuální prvek kolekce během iterace. Definuje také další logický výraz, který je kritériem filtru, který se použije na proměnnou rozsahu pro každý prvek kolekce.

Příklady

Vyhledejte dokumenty, jejichž tags pole obsahuje přesně řetězec "wifi".

tags/any(t: t eq 'wifi')

Porovná dokumenty, ve kterých každý prvek ratings pole spadá mezi 3 a 5 včetně:

ratings/all(r: r ge 3 and r le 5)

Porovná dokumenty, ve kterých se v daném mnohoúhelníku nachází některá z geografických souřadnic v locations poli:

locations/any(loc: geo.intersects(loc, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))

Porovná dokumenty, ve rooms kterých je pole prázdné:

not rooms/any()

Porovná dokumenty, ve kterých (pro všechny místnosti) rooms/amenities pole obsahuje "tv", a rooms/baseRate je menší než 100:

rooms/all(room: room/amenities/any(a: a eq 'tv') and room/baseRate lt 100.0)

Omezení

Ne každá funkce výrazů filtru je k dispozici uvnitř textu výrazu lambda. Omezení se liší v závislosti na datovém typu pole kolekce, které chcete filtrovat. Následující tabulka shrnuje omezení.

Datový typ Funkce povolené ve výrazech lambda s využitím any Funkce povolené ve výrazech lambda s využitím all
Collection(Edm.ComplexType) Vše kromě search.ismatch a search.ismatchscoring Stejné
Collection(Edm.String) Porovnání s eq nebo search.in

Kombinování dílčích výrazů s or
Porovnání s ne nebo not search.in()

Kombinování dílčích výrazů s and
Collection(Edm.Boolean) Porovnání s eq nebo ne Stejné
Collection(Edm.GeographyPoint) Použití geo.distance s lt nebo le

geo.intersects

Kombinování dílčích výrazů s or
Použití geo.distance s gt nebo ge

not geo.intersects(...)

Kombinování dílčích výrazů s and
Collection(Edm.DateTimeOffset), Collection(Edm.Double), , Collection(Edm.Int32)Collection(Edm.Int64) Porovnání pomocí eq, , nelt, gt, , le, neboge

Kombinování porovnání s jinými dílčími výrazy pomocí or

Kombinování porovnání, kromě těch, která zahrnují ne, s jinými dílčími výrazy pomocí and

Výrazy používající kombinace and a or v disjunktivní normální formě (DNF)
Porovnání pomocí eq, , nelt, gt, , le, neboge

Kombinování porovnání s jinými dílčími výrazy pomocí and

Kombinování porovnání, kromě těch, která zahrnují eq, s jinými dílčími výrazy pomocí or

Výrazy používající kombinace and a or v konjunktivní normální formě (CNF)

Další podrobnosti o těchto omezeních a příkladech najdete v tématu Řešení potíží s filtry kolekcí ve službě Azure AI Vyhledávač. Podrobnější informace o tom, proč tato omezení existují, najdete v tématu Vysvětlení filtrů kolekcí ve službě Azure AI Vyhledávač.

Další kroky