OData-verzamelingsoperators in Azure Cognitive Search - any en all

Wanneer u een OData-filterexpressie schrijft voor gebruik met Azure Cognitive Search, is het vaak handig om te filteren op verzamelingsvelden. U kunt dit doen met behulp van de any all operators en .

Syntax

De volgende EBNF(Extended Backus-Naur Form)definieert de grammatica van een OData-expressie die of any all gebruikt.

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

lambda_expression ::= identifier ':' boolean_expression

Er is ook een interactief syntaxisdiagram beschikbaar:

Er zijn drie vormen van expressies die verzamelingen filteren.

  • De eerste twee worden over een verzamelingsveld heen itereren, door een predicaat in de vorm van een lambda-expressie toe te passen op elk element van de verzameling.
    • Een expressie met all true retourneert als het predicaat waar is voor elk element van de verzameling.
    • Een expressie met any true retourneert als het predicaat waar is voor ten minste één element van de verzameling.
  • De derde vorm van een verzamelingsfilter gebruikt zonder een lambda-expressie om te testen of any een verzamelingsveld leeg is. Als de verzameling elementen bevat, retourneert deze true . Als de verzameling leeg is, retourneert deze false .

Een lambda-expressie in een verzamelingsfilter is als de body van een lus in een programmeertaal. Hiermee definieert u een variabele, de bereikvariabele, die het huidige element van de verzameling bevat tijdens de iteratie. Het definieert ook een andere Booleaanse expressie die de filtercriteria zijn die moeten worden toegepast op de bereikvariabele voor elk element van de verzameling.

Voorbeelden

Overeenkomen met documenten waarvan tags het veld precies de tekenreeks 'wifi' bevat:

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

Overeenkomen met documenten waarbij elk element van het ratings veld tussen 3 en 5 valt, inclusief:

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

Overeenkomen met documenten waarin een van de geo-coördinaten in het locations veld zich binnen de opgegeven veelhoek:

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

Overeenkomen met documenten waarin rooms het veld leeg is:

not rooms/any()

Overeenkomen met documenten waarbij voor alle ruimten het rooms/amenities veld 'tv' bevat en rooms/baseRate kleiner is dan 100:

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

Beperkingen

Niet elke functie van filterexpressie is beschikbaar in de hoofd body van een lambda-expressie. De beperkingen zijn afhankelijk van het gegevenstype van het verzamelingsveld dat u wilt filteren. De volgende tabel bevat een overzicht van de beperkingen.

Gegevenstype Functies die zijn toegestaan in lambda-expressies met any Functies die zijn toegestaan in lambda-expressies met all
Collection(Edm.ComplexType) Alles behalve search.ismatch en search.ismatchscoring Hetzelfde
Collection(Edm.String) Vergelijkingen met eq of search.in

Combi neren van subexpressies met or
Vergelijkingen met ne of not search.in()

Combi neren van subexpressies met and
Collection(Edm.Boolean) Vergelijkingen met eq of ne Hetzelfde
Collection(Edm.GeographyPoint) Gebruiken geo.distance met lt of le

geo.intersects

Combi neren van subexpressies met or
Gebruiken geo.distance met gt of ge

not geo.intersects(...)

Combi neren van subexpressies met and
Collection(Edm.DateTimeOffset), Collection(Edm.Double), Collection(Edm.Int32), Collection(Edm.Int64) Vergelijkingen met eq ,,,, ne lt gt le of ge

Combi neren van vergelijkingen met andere subexpressies met or

Vergelijkingen combi neren, behalve ne met andere subexpressies met and

Expressies die gebruikmaken van combi Naties van and en or in disjunctive normaal formulier (DNF)
Vergelijkingen met eq ,,,, ne lt gt le of ge

Combi neren van vergelijkingen met andere subexpressies met and

Vergelijkingen combi neren, behalve eq met andere subexpressies met or

Expressies die gebruikmaken van combi Naties van and en or in Conjunctive normaal formulier (CNF)

Zie Problemen met verzamelingsfilters oplossen in Azure Cognitive Search voor meer informatie over deze Azure Cognitive Search. Zie Inzicht in verzamelingsfilters in Azure Cognitive Search voor meer informatie over de reden Azure Cognitive Search.

Volgende stappen