Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
OData-insamlingsoperatorer i Azure AI Search –
När du skriver ett OData-filteruttryck som ska användas med Azure AI Search är det ofta användbart att filtrera på samlingsfält. Du kan uppnå detta med operatorerna any
och all
.
Syntax
Följande EBNF (Extended Backus-Naur Form) definierar grammatiken för ett OData-uttryck som använder any
eller all
.
collection_filter_expression ::=
field_path'/all(' lambda_expression ')'
| field_path'/any(' lambda_expression ')'
| field_path'/any()'
lambda_expression ::= identifier ':' boolean_expression
Ett interaktivt syntaxdiagram är också tillgängligt:
Kommentar
Se syntaxreferens för OData-uttryck för Azure AI Search för hela EBNF.
Det finns tre uttrycksformer som filtrerar samlingar.
- De första två itererar över ett samlingsfält och tillämpar ett predikat som anges i form av ett lambda-uttryck på varje element i samlingen.
- Ett uttryck som använder
all
returnerartrue
om predikatet är sant för varje element i samlingen. - Ett uttryck som använder
any
returnerartrue
om predikatet är sant för minst ett element i samlingen.
- Ett uttryck som använder
- Den tredje formen av samlingsfilter använder
any
utan ett lambda-uttryck för att testa om ett samlingsfält är tomt. Om samlingen har några element returnerastrue
. Om samlingen är tom returnerarfalse
den .
Ett lambda-uttryck i ett samlingsfilter är som brödtexten i en loop i ett programmeringsspråk. Den definierar en variabel, kallad intervallvariabeln, som innehåller det aktuella elementet i samlingen under iterationen. Den definierar också ett annat booleskt uttryck som är filtervillkoren som ska tillämpas på intervallvariabeln för varje element i samlingen.
Exempel
Matcha dokument vars tags
fält innehåller exakt strängen "wifi":
tags/any(t: t eq 'wifi')
Matcha dokument där varje element i fältet ratings
faller mellan 3 och 5, inklusive:
ratings/all(r: r ge 3 and r le 5)
Matcha dokument där någon av geo-koordinaterna i locations
fältet finns inom den angivna polygonen:
locations/any(loc: geo.intersects(loc, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))
Matcha dokument där fältet rooms
är tomt:
not rooms/any()
Matcha dokument där fältet (för alla rum) rooms/amenities
innehåller "tv" och rooms/baseRate
är mindre än 100:
rooms/all(room: room/amenities/any(a: a eq 'tv') and room/baseRate lt 100.0)
Begränsningar
Alla funktioner i filteruttryck är inte tillgängliga i brödtexten i ett lambda-uttryck. Begränsningarna varierar beroende på datatypen för samlingsfältet som du vill filtrera. I följande tabell sammanfattas begränsningarna.
Datatyp | Funktioner som tillåts i lambda-uttryck med any |
Funktioner som tillåts i lambda-uttryck med all |
---|---|---|
Collection(Edm.ComplexType) |
Allt utom search.ismatch och search.ismatchscoring |
Samma |
Collection(Edm.String) |
Jämförelser med eq eller search.in Kombinera underuttryck med or |
Jämförelser med ne eller not search.in() Kombinera underuttryck med and |
Collection(Edm.Boolean) |
Jämförelser med eq eller ne |
Samma |
Collection(Edm.GeographyPoint) |
Använda geo.distance med lt eller le geo.intersects Kombinera underuttryck med or |
Använda geo.distance med gt eller ge not geo.intersects(...) Kombinera underuttryck med and |
Collection(Edm.DateTimeOffset) , Collection(Edm.Double) , , Collection(Edm.Int32) Collection(Edm.Int64) |
Jämförelser med , eq ne , lt , gt , le ellerge Kombinera jämförelser med andra underuttryck med hjälp av or Kombinera jämförelser förutom ne med andra underuttryck med hjälp av and Uttryck med hjälp av kombinationer av and och or i disjunctive Normal Form (DNF) |
Jämförelser med , eq ne , lt , gt , le ellerge Kombinera jämförelser med andra underuttryck med hjälp av and Kombinera jämförelser förutom eq med andra underuttryck med hjälp av or Uttryck som använder kombinationer av and och or i konjunktiv normal form (CNF) |
Mer information om dessa begränsningar och exempel finns i Felsöka samlingsfilter i Azure AI Search. Mer detaljerad information om varför dessa begränsningar finns finns i Förstå samlingsfilter i Azure AI Search.