배열 연산자
밀버스는 배열 필드를 쿼리할 수 있는 강력한 연산자를 제공하여 배열의 내용을 기반으로 엔티티를 필터링하고 검색할 수 있습니다.
배열 내의 모든 요소는 동일한 유형이어야 하며 배열 내의 중첩 구조는 일반 문자열로 취급됩니다. 따라서 배열 필드로 작업할 때는 최적의 성능을 위해 지나치게 깊은 중첩을 피하고 데이터 구조가 가능한 한 평평한지 확인하는 것이 좋습니다.
사용 가능한 ARRAY 연산자
ARRAY 연산자를 사용하면 Milvus에서 배열 필드를 세밀하게 쿼리할 수 있습니다. 이러한 연산자는 다음과 같습니다:
ARRAY_CONTAINS(identifier, expr)배열 필드에 특정 요소가 존재하는지 확인합니다.ARRAY_CONTAINS_ALL(identifier, expr)는 지정된 목록의 모든 요소가 배열 필드에 있는지 확인합니다.ARRAY_CONTAINS_ANY(identifier, expr)지정된 목록의 요소가 배열 필드에 있는지 확인합니다.ARRAY_LENGTH(identifier)배열 필드에 있는 요소의 수를 반환하며 비교 연산자와 결합하여 필터링할 수 있습니다.
ARRAY_CONTAINS
ARRAY_CONTAINS 연산자는 배열 필드에 특정 요소가 있는지 확인합니다. 지정된 요소가 배열에 있는 엔티티를 찾으려는 경우에 유용합니다.
예제
연도별로 기록된 최저 기온을 포함하는 배열 필드 history_temperatures 가 있다고 가정해 보겠습니다. 배열에 23 값이 포함된 모든 엔터티를 찾으려면 다음 필터 표현식을 사용할 수 있습니다:
filter = 'ARRAY_CONTAINS(history_temperatures, 23)'
그러면 history_temperatures 배열에 23 값이 포함된 모든 엔티티가 반환됩니다.
array_contains_all
ARRAY_CONTAINS_ALL 연산자는 지정된 목록의 모든 요소가 배열 필드에 있는지 확인합니다. 이 연산자는 배열에 여러 값을 포함하는 엔티티를 일치시키려는 경우에 유용합니다.
예제
history_temperatures 배열에 23 과 24 이 모두 포함된 모든 엔티티를 찾으려면 다음을 사용할 수 있습니다:
filter = 'ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])'
그러면 history_temperatures 배열에 지정된 값이 모두 포함된 모든 엔티티가 반환됩니다.
array_contains_any
ARRAY_CONTAINS_ANY 연산자는 지정된 목록의 요소가 배열 필드에 있는지 확인합니다. 이 연산자는 배열에 지정된 값 중 하나 이상이 포함된 엔티티를 일치시키려는 경우에 유용합니다.
예제
history_temperatures 배열에 23 또는 24 이 포함된 모든 엔티티를 찾으려면 다음을 사용할 수 있습니다:
filter = 'ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])'
그러면 history_temperatures 배열에 23 또는 24 값 중 하나 이상이 포함된 모든 엔티티가 반환됩니다.
ARRAY_LENGTH
ARRAY_LENGTH 은 배열 필드의 길이(요소 수)를 반환합니다. 정확히 하나의 매개 변수, 즉 배열 필드 식별자만 허용합니다.
예제
history_temperatures 배열의 요소가 10개 미만인 모든 엔티티를 찾으려면:
filter = 'ARRAY_LENGTH(history_temperatures) < 10'
history_temperatures 배열의 요소가 10개 미만인 모든 엔티티를 반환합니다.