Azure AI Search의 OData search.in 함수

OData 필터 식의 일반적인 시나리오는 각 문서의 단일 필드가 가능한 많은 값 중 하나와 동일한지 확인하는 것입니다. 예를 들어 일부 애플리케이션은 쿼리를 실행하는 사용자를 나타내는 보안 ID 목록에 대해 하나 이상의 보안 ID가 포함된 필드를 검사 보안 트리밍을 구현합니다. 이와 같은 쿼리를 작성하는 한 가지 방법은 및 or 연산자를 eq 사용하는 것입니다.

    group_ids/any(g: g eq '123' or g eq '456' or g eq '789')

그러나 함수를 사용하여 이 함수를 작성하는 방법은 더 짧습니다 search.in .

    group_ids/any(g: search.in(g, '123, 456, 789'))

Important

더 짧고 읽기 쉬운 것 외에도 Using search.in 은 성능상의 이점을 제공하며 필터에 포함할 값이 수백 또는 수천 개일 때 필터의 특정 크기 제한을 방지합니다. 이러한 이유로 같음 식의 더 복잡한 분리 대신 사용하는 search.in 것이 좋습니다.

참고 항목

OData 표준 버전 4.01은 최근 Azure AI Search의 in 함수와 유사한 동작을 보이는 연산자를 search.in 도입했습니다. 그러나 Azure AI Search는 이 연산자를 지원하지 않으므로 대신 함수를 search.in 사용해야 합니다.

구문

다음 EBNF(Extended Backus-Naur Form)는 함수의 문법을 search.in 정의합니다.

search_in_call ::=
    'search.in(' variable ',' string_literal(',' string_literal)? ')'

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

참고 항목

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

함수는 search.in 지정된 문자열 필드 또는 범위 변수가 지정된 값 목록 중 하나와 같은지 테스트합니다. 이 목록에 있는 변수 및 각 값 사이의 동등함은 eq 연산자의 경우와 같이 대소문자 구분 방식으로 결정됩니다. 따라서 같은 search.in(myfield, 'a, b, c') 식은 성능이 훨씬 향상된다는 점을 search.in 제외하고 동일합니다myfield eq 'a' or myfield eq 'b' or myfield eq 'c'.

함수에는 두 가지 오버로드가 search.in 있습니다.

  • search.in(variable, valueList)
  • search.in(variable, valueList, delimiters)

매개 변수는 다음 표에 정의되어 있습니다.

매개 변수 이름 Type 설명
variable Edm.String 문자열 필드 참조(또는 식 내에서 anyall 사용되는 경우 search.in 문자열 컬렉션 필드의 범위 변수)입니다.
valueList Edm.String variable 매개 변수와 비교할 구분된 목록 값을 포함하는 문자열입니다. 매개 변수를 delimiters 지정하지 않으면 기본 구분 기호는 공백과 쉼표입니다.
delimiters Edm.String valueList 매개 변수를 구문 분석할 때 각 문자가 구분 기호로 처리되는 문자열입니다. 이 매개 변수의 기본값은 ' ,' 공백 및/또는 쉼표가 있는 모든 값이 구분됨을 의미합니다. 값에 해당 문자가 포함되므로 공백 및 쉼표 이외의 구분 기호를 사용해야 하는 경우 이 매개 변수와 같은 '|' 대체 구분 기호를 지정할 수 있습니다.

의 성능 search.in

사용하는 search.in경우 두 번째 매개 변수에 수백 또는 수천 개의 값 목록이 포함된 경우 초 미만의 응답 시간을 예상할 수 있습니다. 최대 요청 크기로 제한되지만 전달할 search.in수 있는 항목 수에는 명시적 제한이 없습니다. 그러나 값 수가 증가함에 따라 대기 시간도 증가합니다.

예제

이름이 ‘Sea View motel’이거나 ‘Budget hotel’인 호텔을 모두 찾습니다. 구에는 기본 구분 기호인 공백이 포함됩니다. 대체 구분 기호를 작은따옴표로 묶어 세 번째 문자열 매개 변수로 지정할 수 있습니다.

    search.in(HotelName, 'Sea View motel,Budget hotel', ',')

이름이 '|'으로 구분된 '씨뷰 모텔' 또는 '버짓 호텔'과 같은 이름의 모든 호텔을 찾습니다.

    search.in(HotelName, 'Sea View motel|Budget hotel', '|')

다음과 같이 'wifi' 또는 'tub' 태그가 있는 방이 있는 모든 호텔을 찾습니다.

    Rooms/any(room: room/Tags/any(tag: search.in(tag, 'wifi, tub')))

태그에서 '가열된 수건 랙' 또는 '헤어드라이어 포함'과 같은 컬렉션 내의 구에서 일치하는 항목을 찾습니다.

    Rooms/any(room: room/Tags/any(tag: search.in(tag, 'heated towel racks,hairdryer included', ','))

다음과 같이 'motel' 또는 'cabin' 태그가 없는 모든 호텔을 찾습니다.

    Tags/all(tag: not search.in(tag, 'motel, cabin'))

다음 단계