Azure AI Search의 OData 비교 연산자 - eq,ne, gt, ltgele

Azure AI Search의 OData 필터 식 에서 가장 기본적인 작업은 필드를 지정된 값과 비교하는 것입니다. 같음 비교와 범위 비교라는 두 가지 유형의 비교가 가능합니다. 다음 연산자를 사용하여 필드를 상수 값과 비교할 수 있습니다.

같음 연산자:

  • eq: 필드가 상수 값과 같은지 여부를 테스트합니다.
  • ne: 필드가 상수 값과 같지 않은지 테스트

범위 연산자:

  • gt: 필드가 상수 값보다 큰지 테스트
  • lt: 필드가 상수 값보다 작은지 테스트
  • ge: 필드가 상수 값보다 크거나 같은지 여부를 테스트합니다.
  • le: 필드가 상수 값보다 작거나 같은 지 테스트합니다.

범위 연산자를 논리 연산자와 함께 사용하여 필드가 특정 값 범위 내에 있는지 여부를 테스트할 수 있습니다. 이 문서의 뒷부분에 있는 예제를 참조하세요.

참고 항목

원할 경우 연산자의 왼쪽에 상수 값을 입력하고 오른쪽에 필드 이름을 입력할 수 있습니다. 범위 연산자의 경우 비교의 의미가 반전됩니다. 예를 들어 상수 값이 왼쪽에 있으면 gt는 상수 값이 필드보다 큰지 여부를 테스트합니다. 비교 연산자를 사용하여 함수의 결과(예: geo.distance값)를 비교할 수도 있습니다. 부울 함수(예: search.ismatch결과 true 비교)의 경우 선택 사항입니다 false .

구문

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

comparison_expression ::=
    variable_or_function comparison_operator constant |
    constant comparison_operator variable_or_function

variable_or_function ::= variable | function_call

comparison_operator ::= 'gt' | 'lt' | 'ge' | 'le' | 'eq' | 'ne'

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

참고 항목

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

비교 식에는 두 가지 형식이 있습니다. 둘 사이의 유일한 차이점은 상수가 연산자의 왼쪽 또는 오른쪽에 표시되는지 여부입니다. 연산자 반대편에 있는 식은 변수 또는 함수 호출이어야 합니다. 변수는 필드 이름이거나 람다 식의 경우 범위 변수일 수 있습니다.

비교를 위한 데이터 형식

비교 연산자의 양쪽에 있는 데이터 형식은 호환되어야 합니다. 예를 들어 왼쪽이 형식 Edm.DateTimeOffset필드인 경우 오른쪽은 날짜-시간 상수여야 합니다. 숫자 데이터 형식은 더 유연합니다. 다음 표에 설명된 대로 숫자 형식의 변수와 함수를 다른 숫자 형식의 상수와 비교할 수 있습니다.

변수 또는 함수 형식 상수 값 형식 제한 사항
Edm.Double Edm.Double 비교는 다음의 특수 규칙의 적용을 받습니다. NaN
Edm.Double Edm.Int64 상수가 변환 Edm.Double되어 큰 크기의 값에 대한 전체 자릿수가 손실됩니다.
Edm.Double Edm.Int32 해당 없음
Edm.Int64 Edm.Double -INF대한 NaN비교 또는 INF 허용되지 않음
Edm.Int64 Edm.Int64 해당 없음
Edm.Int64 Edm.Int32 상수가 비교 전으로 Edm.Int64 변환됩니다.
Edm.Int32 Edm.Double -INF대한 NaN비교 또는 INF 허용되지 않음
Edm.Int32 Edm.Int64 해당 없음
Edm.Int32 Edm.Int32 해당 없음

형식 Edm.Int64NaN필드를 비교하는 것과 같이 허용되지 않는 비교의 경우 Azure AI Search REST API는 "HTTP 400: 잘못된 요청" 오류를 반환합니다.

Important

숫자 형식 비교는 유연하지만 상수 값이 비교되는 변수 또는 함수와 동일한 데이터 형식이 되도록 필터에서 비교를 작성하는 것이 좋습니다. 이는 정밀도를 잃는 암시적 변환이 가능한 부동 소수점 및 정수 값을 혼합할 때 특히 중요합니다.

nullNaN

비교 연산자를 사용하는 경우 Azure AI Search의 모든 비 컬렉션 필드가 잠재적으로 있을 수 있음을 기억해야 합니다 null. 다음 표에서는 어느 한 쪽이 될 null수 있는 비교 식에 대해 가능한 모든 결과를 보여 줍니다.

작업 필드 또는 변수만 있는 경우의 결과 null 상수만 있는 경우의 결과 null 필드 또는 변수와 상수가 둘 다 null인 경우의 결과
gt false HTTP 400: 잘못된 요청 오류 HTTP 400: 잘못된 요청 오류
lt false HTTP 400: 잘못된 요청 오류 HTTP 400: 잘못된 요청 오류
ge false HTTP 400: 잘못된 요청 오류 HTTP 400: 잘못된 요청 오류
le false HTTP 400: 잘못된 요청 오류 HTTP 400: 잘못된 요청 오류
eq false false true
ne true true false

요약하자면, null 자체만 동일하며 다른 값보다 작거나 크지는 않습니다.

인덱스에 형식 Edm.Double 필드가 있고 해당 필드에 값을 업로드 NaN 하는 경우 필터를 작성할 때 이를 고려해야 합니다. Azure AI Search는 값을 처리하기 NaN 위한 IEEE 754 표준을 구현하며, 이러한 값과 비교하면 다음 표와 같이 명확하지 않은 결과가 생성됩니다.

작업 하나 이상의 피연산자가 NaN인 경우의 결과
gt false
lt false
ge false
le false
eq false
ne true

요약하자면, NaN 자신을 포함하여 어떤 값과도 같지 않습니다.

지역 공간 데이터 비교

형식 Edm.GeographyPoint 필드를 상수 값과 직접 비교할 수는 없지만 함수를 geo.distance 사용할 수 있습니다. 이 함수는 Edm.Double 형식의 값을 반환하므로 숫자 상수와 비교하여 상수 지리 공간 좌표에서의 거리를 기준으로 필터링할 수 있습니다. 아래 예제 를 참조하세요 .

문자열 데이터 비교

문자열은 필터에서 비교하여 정확히 일치하는 항목과 ne 연산자를 eq 사용할 수 있습니다. 이 비교는 대/소문자를 구분합니다.

예제

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

Rating ge 3 and Rating le 5

Location 필드가 지정된 위도 및 경도에서 2킬로미터 미만인 문서를 찾습니다.

geo.distance(Location, geography'POINT(-122.031577 47.578581)') lt 2.0

필드가 LastRenovationDate 2015년 1월 1일 자정 UTC보다 크거나 같은 문서를 일치합니다.

LastRenovationDate ge 2015-01-01T00:00:00.000Z

필드가 Details/Sku 아닌 null문서 일치:

Details/Sku ne null

필드의 문자열 Rooms/Type 이 필터와 정확히 일치하는 "디럭스 룸" 유형이 하나 이상 있는 호텔의 문서를 일치합니다.

Rooms/any(room: room/Type eq 'Deluxe Room')

다음 단계