StructArray 연산자

StructArray 연산자는 StructArray 필드 내의 스칼라 하위 필드에 대한 술어를 평가하여 엔티티를 필터링합니다. 이 페이지는 ` element_filter ` 및 ` MATCH_* ` 연산자 계열에 대한 구문 참조 자료로 활용하십시오.

StructArray 필터링에는 두 가지 연산자 계열이 있습니다:

연산자 계열주요 용도결과 동작
element_filter스칼라 술레이트를 만족하는 Struct 요소를 일치시킵니다.요소 수준 검색에서 일치하는 결과에는 요소 오프셋이 포함될 수 있습니다. 행 수준 쿼리 또는 필터링된 검색에서 결과 형식은 API 및 출력 필드에 따라 달라집니다.
MATCH_*스칼라 술어 조건을 만족하는 Struct 요소의 개수에 따라 엔티티를 선택합니다.행 수준 필터링. 이 연산자들은 자체적으로 요소 오프셋을 반환하지 않습니다.

StructArray 연산자에서는 스칼라 하위 필드를 사용하십시오. 벡터 하위 필드는 벡터 검색 경로에서 사용되며, 스칼라 술어 입력으로 사용되지 않습니다.

어떤 연산자를 언제 사용해야 하는가

목표사용법
스칼라 조건에 부합하는 요소로 요소 수준 벡터 검색을 제한합니다.element_filter
동일한 Struct 요소 내에서 여러 스칼라 조건에 일치시키려면.element_filter
적어도 하나의 Struct 요소가 술어를 만족하는 엔티티만 반환합니다.MATCH_ANY
모든 Struct 요소가 술어를 만족하는 엔티티만 반환합니다.MATCH_ALL
N Struct 요소 중 최소, 최대 또는 정확히 해당 개수가 술어를 만족하는 엔티티만 반환합니다.MATCH_LEAST, MATCH_MOST 또는 MATCH_EXACT

요소 필터

element_filter(structArrayField, predicate) 을 사용하여 StructArray 필드의 Struct 요소를 일치시킵니다.

술어 내에서 $[subfield] 를 사용하여 현재 Struct 요소의 스칼라 하위 필드를 참조합니다.

element_filter(chunks, $[section] == "index")

술어 내에서 여러 조건이 사용되는 경우, 모든 ` $[subfield] ` 참조는 동일한 Struct 요소에 적용됩니다.

element_filter(chunks, $[section] == "index" && $[quality_score] > 0.9)

엔티티 수준 술어와 ` element_filter`를 결합할 때는 ` element_filter `를 표현식의 맨 끝에 배치하십시오:

# Correct
category == "index" && element_filter(chunks, $[quality_score] > 0.9)

# Incorrect
element_filter(chunks, $[quality_score] > 0.9) && category == "index"

element_filter 는 필터 표현식에서 한 번만 나타날 수 있습니다. element_filter 또는 MATCH_* 를 다른 element_filter 안에 중첩하지 마십시오.

일치 계열 연산자

MATCH_* 연산자는 술어를 만족하는 Struct 요소의 수에 따라 엔티티를 선택해야 할 때 사용합니다.

연산자의미
MATCH_ANY(field, predicate)적어도 하나의 Struct 요소가 술어를 만족합니다.
MATCH_ALL(field, predicate)모든 Struct 요소가 술어를 만족합니다.
MATCH_LEAST(field, predicate, threshold=N)N 개 이상의 Struct 요소가 술어를 만족합니다.
MATCH_MOST(field, predicate, threshold=N)N 개 이하의 Struct 요소가 술어를 만족합니다.
MATCH_EXACT(field, predicate, threshold=N)N 개의 Struct 요소가 정확히 해당 술어를 만족합니다.

MATCH_ANY element_filter 은 모두 적어도 하나의 Struct 요소가 술어를 만족함을 나타낼 수 있습니다. 행 수준 필터링만 필요한 경우 를 사용하십시오. 요소 수준 벡터 검색에 참여하는 Struct 요소를 필터링하는 등 요소 수준 제약 조건이 필요한 경우 를 사용하십시오. MATCH_ANY element_filter

MATCH_ANY

MATCH_ANY StructArray의 요소 중 적어도 하나가 술어를 만족하면 true 로 평가됩니다.

MATCH_ANY(chunks, $[section] == "index")

빈 StructArray의 경우, ` MATCH_ANY `는 ` false`를 반환합니다.

MATCH_ALL

MATCH_ALL StructArray의 모든 요소가 술어를 만족하는 경우, true 로 평가됩니다.

MATCH_ALL(chunks, $[has_code] == true)

빈 StructArray의 경우, MATCH_ALL 는 true 를 반환합니다.

MATCH_LEAST

MATCH_LEAST 는 술어를 만족하는 요소의 수가 threshold 이상일 때 true 로 평가됩니다.

MATCH_LEAST(chunks, $[quality_score] > 0.9, threshold=2)

MATCH_LEAST 의 경우, threshold 는 양의 정수여야 합니다.

MATCH_MOST는 술어를 만족하는 요소의 개수가 xml-ph-0001@deepl.internal보다 작거나 같을 때 xml-ph-0000@deepl.internal로 평가됩니다.

MATCH_MOST 술어를 만족하는 요소의 개수가 threshold 이하인 경우, true 로 평가됩니다.

MATCH_MOST(chunks, $[has_code] == true, threshold=1)

MATCH_MOST 의 경우, threshold 는 0이거나 양의 정수일 수 있습니다.

MATCH_EXACT

MATCH_EXACT 는 술어를 만족하는 요소의 개수가 threshold 와 정확히 일치할 때 true 로 평가됩니다.

MATCH_EXACT(chunks, $[section] == "filter", threshold=1)

MATCH_EXACT 의 경우, threshold 는 0이거나 양의 정수일 수 있습니다.

지원되는 술어

$[...] 구문은 현재 Struct 요소의 스칼라 값을 나타냅니다. 술어 지원 여부는 스칼라 하위 필드 유형에 따라 다릅니다.

서브필드 유형요소 수준 술어 지원
BOOL$[has_code] == true 이나 !($[has_code] == true) 과 같은 스칼라 술어. $[has_code] 과 같은 단순한 부울 표현식은 사용하지 마십시오.
INT8, INT16, INT32, INT64비교 연산, 연쇄 범위, in, not in, +, -, *, / 또는 % 에 이어 비교 연산이 포함된 산술 표현식, 그리고 논리 조합.
FLOAT, DOUBLE비교, 연쇄 범위, in, not in, +, -, * 또는 / 를 포함한 산술 표현식에 이어지는 비교 연산, 그리고 논리 결합. % 연산자는 부동 소수점 하위 필드에서는 지원되지 않습니다.
VARCHAR문자열 비교, 연쇄 범위, in, not in, like, =~, !~ 및 논리 연산 조합.
벡터 하위 필드$[...] 의 스칼라 술어 입력으로는 지원되지 않습니다. 대신 EmbeddingList 검색이나 요소 수준 벡터 검색을 통해 벡터 하위 필드를 사용하십시오.

&&, \|\|, ! 와 같은 논리 연산자는 술어 표현식에 적용됩니다. 예를 들어, !$[has_code] 대신 !($[has_code] == true) 를 작성하십시오.

지원되지 않는 술어

요소 수준 $[...] 술어는 다음을 지원하지 않습니다:

  • text_match(field, "...") 이나 phrase_match(field, "...") 과 같은 텍스트 일치 함수.

  • JSON 경로 구문, JSON 경로에 대한 exists, 또는 json_contains, json_contains_all, json_contains_any 과 같은 JSON 함수.

  • array_contains, array_contains_all, array_contains_any 또는 array_length 과 같은 배열 컨테이너 함수.

  • $[subfield] is null 또는 $[subfield] is not null.

  • 기하학/GIS 함수.

  • timestamptz 표현식.

  • random_sample(...).

  • 필드 수준 벡터 술어.

  • 특정 함수 시그니처 및 실행 경로가 StructArray 요소 수준 술어를 명시적으로 지원하지 않는 한, 일반 필터 함수 호출.

구문 규칙

  • MATCH_* 연산자 이름은 대소문자를 구분하지 않습니다.

  • $[subfield] 는 element_filter 또는 MATCH_* 술어 내에서만 사용하십시오.

  • $[subfield] 를 JSON 경로, 배열 컨테이너 또는 벡터 필드 참조로 사용하지 마십시오.

  • element_filter 또는 MATCH_* 를 다른 StructArray 연산자 안에 중첩하지 마십시오.

  • MATCH_LEAST, MATCH_MOST 및 MATCH_EXACT 의 경우 이름이 지정된 threshold=N 를 사용하십시오.

  • MATCH_ANY 빈 StructArray에 대해 호출하면 false 를 반환합니다.

  • MATCH_ALL 빈 StructArray에 대해 호출하면 true 를 반환합니다.

참조