StructArray 연산자Compatible with Milvus 3.0.x
엔티티의 구조체 배열 또는 StructArray는 정렬된 구조체 요소 집합을 저장합니다. 배열의 각 Struct는 여러 벡터와 스칼라 필드로 구성된 동일한 사전 정의 스키마를 공유합니다. Struct의 스칼라 하위 필드가 인덱싱되면 일치 계열의 요소 필터와 연산자를 사용하여 스칼라 필터링을 수행할 수 있습니다.
엘리먼트 필터는 지정된 술어와 일치하는 값이 StructArray 필드에 하나 이상 포함된 엔티티를 선택합니다. 반대로 일치 패밀리 연산자는 지정된 술어와 일치하는 StructArray 필드에서 특정 숫자 또는 비율의 값을 포함하는 엔티티를 찾는 데 사용됩니다.
이러한 연산자는 각 후보 엔티티에 대한 배열 요소를 반복해야 하므로 대규모 데이터 집합으로 작업하는 경우 $[subField] 에 대한 술어를 작성할 때 하위 필드가 인덱싱되어 있는지 확인하세요.
요소 필터
엔티티에 StructArray 필드에 특정 술어와 일치하는 값이 포함되어 있는지 확인해야 하는 경우 요소 필터를 사용합니다.
element_filter(chunks, $[text] LIKE "Red%")
위의 요소 필터 표현식에서 볼 수 있듯이 요소 필터는 text 하위 필드에 "Red"로 시작하는 청크를 하나 이상 포함하는 엔티티를 반환합니다. 첫 번째 매개변수는 StructArray 필드의 이름이고, 두 번째 매개변수는 Struct 하위 필드에 적용되는 술어입니다.
기본 연산자에 표시된 대로 비교, 범위 및 산술 연산자를 사용하여 조건을 작성하고 논리 연산자를 사용하여 여러 조건을 연결할 수 있습니다.
그러나 엔티티 수준 술어와 요소 필터를 모두 결합하는 필터 표현식을 작성할 때는 다음 예와 같이 항상 요소 플ㄹ틀러를 마지막에 배치해야 합니다.
# correct
id > 0 && element_filter(chunks, $[x] > 1)
# incorrect, resulting errors
element_filter(chunks, $[x] > 1) && id > 0
일치 패밀리 연산자
일치 패밀리 연산자는 StructArray 필드에서도 작동합니다. 단순히 요소의 존재 여부를 확인하는 대신 요소 술어를 만족해야 하는 요소의 수(또는 비율)를 결정할 수 있습니다.
MATCH_ANY(identifier, predicate)는text하위 필드에 "Red"로 시작하는 청크가 하나 이상 포함된 엔티티를 반환합니다(의미상 이는element_filter.MATCH_ALL(identifier, predicate)모든 청크의 텍스트 하위 필드가 "Red"로 시작하는 엔터티를 반환합니다.MATCH_LEAST(identifier, predicate, k)text하위 필드에 "Red"로 시작하는 청크가k개 이상 포함된 엔터티를 반환합니다.MATCH_MOST(identifier, predicate, k)text하위 필드에 "Red"로 시작하는 청크가 최대k개 포함된 엔터티를 반환합니다.MATCH_EXACT(identifier, predicate, k)text하위 필드에 "Red"로 시작하는k청크가 정확히 포함된 엔터티를 반환합니다.
MATCH_ANY
이 연산자는 배열에 있는 하나 이상의 요소가 술어를 만족하는 경우 참으로 평가되며, 이는 모든 배열 요소에서 논리적 OR 에 해당하는 구조가 있음을 나타냅니다.
MATCH_ANY 연산자와 요소 필터는 의미적으로 동일하므로 서로 바꿔서 사용할 수 있습니다. count(matches) >= 1 논리를 표현해야 할 때는 이 두 가지를 사용해야 합니다.
예시:
다음 예는 문서의 일부가 "Red"로 시작하는 엔티티를 반환합니다.
MATCH_ANY(chunks, $[text] LIKE 'Red%')
MATCH_ALL
이 연산자는 배열의 모든 요소가 술어를 만족하는 경우에만 참으로 평가됩니다.
count(matches) == total elements 로직을 표현해야 하는 경우 이 연산자를 사용합니다.
예제:
MATCH_ALL(chunks, $[text] LIKE 'Red%')
MATCH_LEAST
이 연산자는 술어를 만족하는 요소의 수가 지정된 상수 k보다 크거나 같으면 참을 반환하는 정량적 필터입니다.
count(matches) >= k 로직을 표현해야 하는 경우 이 연산자를 사용합니다.
예제:
MATCH_LEAST(chunks, $[text] LIKE 'Red%', 3)
MATCH_MOST
이 연산자는 술어를 만족하는 요소의 수가 지정된 상수 k보다 작거나 같으면 참을 반환하는 정량적 필터입니다.
이 연산자는 특정 키워드를 과도하게 타겟팅하는 개체를 필터링하는 데 특히 유용합니다(노이즈 감소).
예시:
MATCH_MOST(chunks, $[text] LIKE 'Red%', 3)
MATCH_EXACT
이 연산자는 제품군에서 가장 제한적인 정량 연산자입니다. 술어를 만족하는 요소의 수가 정확히 k인 경우에만 참을 반환합니다.
예제:
MATCH_EXACT(chunks, $[text] LIKE 'Red%', 3)