Azure AI Search의 OData 컬렉션 연산자 - anyall

Azure AI Search와 함께 사용할 OData 필터 식을 작성할 때 컬렉션 필드를 필터링하는 것이 유용한 경우가 많습니다. 이 작업은 연산자와 all 연산자를 any 사용하여 수행할 수 있습니다.

구문

다음 EBNF(Extended Backus-Naur Form)는 사용하거나 all사용하는 any OData 식의 문법을 정의합니다.

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

lambda_expression ::= identifier ':' boolean_expression

다음과 같은 대화형 구문 다이어그램도 사용할 수 있습니다.

참고 항목

전체 EBNF는 Azure AI Search에 대한 OData 식 구문 참조를 참조하세요.

컬렉션을 필터링하는 식에는 세 가지 형식이 있습니다.

  • 처음 두 개는 컬렉션 필드를 반복하여 람다 식의 형식으로 제공된 조건자를 각 컬렉션 요소에 적용합니다.
    • 조건자가 컬렉션의 모든 요소에 대해 true이면 반환 true 을 사용하는 all 식입니다.
    • 조건자가 컬렉션의 하나 이상의 요소에 대해 true이면 반환 true 을 사용하는 any 식입니다.
  • 세 번째 형태의 컬렉션 필터는 람다 식 없이 사용하여 any 컬렉션 필드가 비어 있는지 여부를 테스트합니다. 컬렉션에 요소가 있으면 반환됩니다 true. 컬렉션이 비어 있으면 해당 컬렉션이 반환됩니다 false.

컬렉션 필터의 람다 식은 프로그래밍 언어의 루프 본문과 같습니다. 반복하는 동안 컬렉션의 현재 요소를 보유하는 범위 변수라는 변수를 정의합니다. 또한 각 컬렉션 요소의 범위 변수에 적용할 필터 기준이 되는 또 다른 부울 식을 정의합니다.

예제

필드에 정확히 문자열 "wifi"가 포함된 문서를 tags 일치합니다.

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

필드의 ratings 모든 요소가 3에서 5 사이인 문서와 일치합니다.

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

필드의 모든 지역 좌표가 지정된 다각형 내에 있는 locations 문서를 일치합니다.

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

필드가 rooms 비어 있는 문서 일치:

not rooms/any()

필드가 rooms/amenities "tv" rooms/baseRate 를 포함하고 100 미만인 문서를 일치합니다.

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

제한 사항

필터 식의 모든 기능을 람다 식의 본문 내에서 사용할 수 있는 것은 아닙니다. 제한 사항은 필터링하려는 컬렉션 필드의 데이터 형식에 따라 다릅니다. 다음 표에서는 제한 사항을 요약합니다.

데이터 형식 any가 있는 람다 식에서 허용되는 기능 all가 있는 람다 식에서 허용되는 기능
Collection(Edm.ComplexType) search.ismatchsearch.ismatchscoring을 제외한 모든 항목 동일
Collection(Edm.String) 또는 eqsearch.in

하위 식과 or 결합
또는 nenot search.in()

하위 식과 and 결합
Collection(Edm.Boolean) 또는 eqne 동일
Collection(Edm.GeographyPoint) 사용 geo.distance 여부 ltle

geo.intersects

하위 식과 or 결합
사용 geo.distance 여부 gtge

not geo.intersects(...)

하위 식과 and 결합
Collection(Edm.DateTimeOffset), Collection(Edm.Double), Collection(Edm.Int32), Collection(Edm.Int64) eq, , ne, gtltle또는ge

or를 사용하여 다른 하위 식과 비교 결합

using을 사용하여 다른 하위 식과 비교 ne 결합 and

DNF(Disjunctive Normal Form)의 andor조합을 사용하는 식
eq, , ne, gtltle또는ge

and를 사용하여 다른 하위 식과 비교 결합

using을 사용하여 다른 하위 식과 비교 eq 결합 or

CNF(Conjunctive Normal Form)의 and 조합과 or결합을 사용하는 식

이러한 제한 사항 및 예제에 대한 자세한 내용은 Azure AI Search의 컬렉션 필터 문제 해결을 참조하세요. 이러한 제한 사항이 존재하는 이유에 대한 자세한 내용은 Azure AI Search의 컬렉션 필터 이해를 참조하세요.

다음 단계