Azure AI Search의 OData 논리 연산자 - and, ornot

Azure AI Search의 OData 필터 식은 평가 true 되는 부울 식입니다 false. 일련의 간단한 필터를 작성하고 부울 대수논리 연산자를 사용하여 작성하여 복잡한 필터를 작성할 수 있습니다.

  • and: 왼쪽 및 오른쪽 하위 식이 모두 true로 평가되면 true로 평가되는 이항 연산자입니다.
  • or: 왼쪽 및 오른쪽 하위 식 중 하나가 true로 평가되면 true로 평가되는 이항 연산자입니다.
  • not: 하위 식이 계산되는지 또는 그 반대로 계산되는지를 평가하는 truefalse단항 연산자입니다.

컬렉션 연산 any 자와 all함께 매우 복잡한 검색 조건을 표현할 수 있는 필터를 생성할 수 있습니다.

구문

다음 EBNF(Extended Backus-Naur Form)는 논리 연산자를 사용하는 OData 식의 문법을 정의합니다.

logical_expression ::=
    boolean_expression ('and' | 'or') boolean_expression
    | 'not' boolean_expression

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

참고 항목

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

논리 식에는 두 개의 하위 식이 있는 이진(and/or)과 단항식(not)의 두 가지 형태가 있습니다. 여기서는 하나만 있습니다. 하위 식은 모든 종류의 부울 식일 수 있습니다.

  • 형식의 필드 또는 범위 변수 Edm.Boolean
  • 형식 Edm.Boolean의 값을 반환하는 함수(예: geo.intersects ) search.ismatch
  • 비교 식(예: rating gt 4)
  • 컬렉션 식(예: ) Rooms/any(room: room/Type eq 'Deluxe Room')
  • 부울 리터럴 true 또는 false
  • 를 사용하여 andor생성된 기타 논리 식 및 not.

Important

특히 람다 식 내에서는 and/or과 함께 모든 종류의 하위 식을 사용할 수 없는 경우도 있습니다. 자세한 내용은 Azure AI Search의 OData 컬렉션 연산자를 참조하세요.

논리 연산자 및 null

함수 및 비교와 같은 대부분의 부울 식은 값을 생성 null 할 수 없으며 논리 연산자는 리터럴에 null 직접 적용할 수 없습니다(예 x and null : 허용되지 않음). 그러나 부울 필드는 될 null수 있으므로 null이 있을 때 , ornot 연산자가 어떻게 동작하는지 and알고 있어야 합니다. 다음 표에 요약되어 있습니다. 여기서 b 형식 Edm.Boolean의 필드는 다음과 같습니다.

bnull인 경우의 결과
b false
not b true
b eq true false
b eq false false
b eq null true
b ne true true
b ne false true
b ne null false
b and true false
b and false false
b or true true
b or false false

부울 필드가 필터 식에 단독으로 나타나면 마치 부울 필드가 작성된 b eq true것처럼 동작하므로,이 경우 bnull식이 계산됩니다false.b 마찬가지로 다음과 not b 같이 not (b eq true)동작하므로 .로 true평가됩니다. 이러한 방식으로 null 필드는 .와 동일하게 false동작합니다. 이는 위 표와 같이 사용 and 및 다른 식과 결합할 때 동작하는 방식과 or일치합니다. 하지만 false와 직접 비교하는 경우(b eq false)에도 false로 평가됩니다. 즉, null 부울 식에서처럼 동작하더라도 같지 false않습니다.

예제

필드가 rating 3에서 5 사이인 문서(포함) 일치:

    rating ge 3 and rating le 5

ratings 필드의 모든 요소가 3보다 작거나 5보다 큰 문서를 찾습니다.

    ratings/all(r: r lt 3 or r gt 5)

location 필드가 지정된 다각형 내에 있고 문서에 “public”이라는 용어가 포함되지 않은 문서를 찾습니다.

    geo.intersects(location, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))') and not search.ismatch('public')

기본 요금이 160 미만인 deluxe 객실이 있는 캐나다 밴쿠버 호텔의 문서를 찾습니다.

    Address/City eq 'Vancouver' and Address/Country eq 'Canada' and Rooms/any(room: room/Type eq 'Deluxe Room' and room/BaseRate lt 160)

다음 단계