Azure AI Search의 OData 컬렉션 연산자 - any
및 all
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
식입니다.
- 조건자가 컬렉션의 모든 요소에 대해 true이면 반환
- 세 번째 형태의 컬렉션 필터는 람다 식 없이 사용하여
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.ismatch 와 search.ismatchscoring 을 제외한 모든 항목 |
동일 |
Collection(Edm.String) |
또는 eq search.in 하위 식과 or 결합 |
또는 ne not search.in() 하위 식과 and 결합 |
Collection(Edm.Boolean) |
또는 eq ne |
동일 |
Collection(Edm.GeographyPoint) |
사용 geo.distance 여부 lt le geo.intersects 하위 식과 or 결합 |
사용 geo.distance 여부 gt ge not geo.intersects(...) 하위 식과 and 결합 |
Collection(Edm.DateTimeOffset) , Collection(Edm.Double) , Collection(Edm.Int32) , Collection(Edm.Int64) |
eq , , ne , gt lt le 또는ge or 를 사용하여 다른 하위 식과 비교 결합 using을 사용하여 다른 하위 식과 비교 ne 결합 and DNF(Disjunctive Normal Form)의 and or 조합을 사용하는 식 |
eq , , ne , gt lt le 또는ge and 를 사용하여 다른 하위 식과 비교 결합 using을 사용하여 다른 하위 식과 비교 eq 결합 or CNF(Conjunctive Normal Form)의 and 조합과 or 결합을 사용하는 식 |
이러한 제한 사항 및 예제에 대한 자세한 내용은 Azure AI Search의 컬렉션 필터 문제 해결을 참조하세요. 이러한 제한 사항이 존재하는 이유에 대한 자세한 내용은 Azure AI Search의 컬렉션 필터 이해를 참조하세요.
다음 단계
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기