필터링 설명
Milvus는 데이터를 정밀하게 쿼리할 수 있는 강력한 필터링 기능을 제공합니다. 필터 표현식을 사용하면 특정 스칼라 필드를 대상으로 지정하고 다양한 조건으로 검색 결과를 구체화할 수 있습니다. 이 가이드에서는 쿼리 작업에 초점을 맞춘 예제를 통해 Milvus에서 필터 표현식을 사용하는 방법을 설명합니다. 검색 및 삭제 요청에도 이러한 필터를 적용할 수 있습니다.
기본 연산자
Milvus는 데이터 필터링을 위한 몇 가지 기본 연산자를 지원합니다.
비교 연산자
==
,!=
,>
,<
,>=
,<=
를 사용하면 숫자, 텍스트 또는 날짜 필드를 기준으로 필터링할 수 있습니다.범위 필터:
IN
및LIKE
은 특정 값 범위 또는 집합을 일치시키는 데 도움이 됩니다.산술 연산자:
+
,-
,*
,/
,%
및 ``는 숫자 필드와 관련된 계산에 사용됩니다.논리 연산자:
AND
,OR
,NOT
또는 '&&', '||', '~', '!'는 여러 조건을 복잡한 표현식으로 결합합니다.
예시: 색상으로 필터링하기
스칼라 필드 color
에서 원색(빨강, 초록, 파랑)을 가진 엔티티를 찾으려면 다음 필터 표현식을 사용합니다.
filter='color in ["red", "green", "blue"]'
예시: JSON 필드 필터링
Milvus에서는 JSON 필드에서 키를 참조할 수 있습니다. 예를 들어 키가 price
및 model
인 JSON 필드 product
가 있고 특정 모델과 가격이 1,850보다 낮은 제품을 찾고자 하는 경우 다음 필터 표현식을 사용합니다.
filter='product["model"] == "JSN-087" and product["price"] < 1850'
예시: 배열 필드 필터링
온도 기록이 포함된 배열 필드 history_temperatures
가 있고 10번째 기록 온도가 23°C를 초과하는 관측소를 찾고자 하는 경우 이 표현식을 사용합니다.
filter='history_temperatures[10] > 23'
이러한 기본 연산자에 대한 자세한 내용은 기본 연산자를 참조하세요.
필터 표현식 템플릿
한중일 문자를 사용하여 필터링하는 경우, 더 큰 문자 집합과 인코딩 차이로 인해 처리가 더 복잡해질 수 있습니다. 이로 인해 특히 IN
연산자의 경우 성능이 느려질 수 있습니다.
Milvus는 한중일 문자로 작업할 때 성능을 최적화하기 위해 필터 표현식 템플릿을 도입했습니다. 필터 표현식에서 동적 값을 분리함으로써 쿼리 엔진이 매개변수 삽입을 보다 효율적으로 처리합니다.
예제
'北京'(베이징) 또는 '上海'(상하이)에 거주하는 25세 이상의 개인을 찾으려면 다음 템플릿 표현식을 사용합니다.
filter = "age > 25 and city in ['北京', '上海']"
성능을 향상시키려면 이 변형을 매개변수와 함께 사용합니다.
filter = "age > {age} and city in {city}",
filter_params = {"age": 25, "city": ["北京", "上海"]}
이 접근 방식은 구문 분석 오버헤드를 줄이고 쿼리 속도를 향상시킵니다. 자세한 내용은 필터 템플릿을 참조하세요.
데이터 유형별 연산자
Milvus는 JSON, ARRAY, VARCHAR 필드와 같은 특정 데이터 유형에 대한 고급 필터링 연산자를 제공합니다.
JSON 필드별 연산자
Milvus는 JSON 필드 쿼리를 위한 고급 연산자를 제공하여 복잡한 JSON 구조 내에서 정밀한 필터링을 가능하게 합니다.
JSON_CONTAINS(identifier, jsonExpr)
: 필드에 JSON 표현식이 존재하는지 확인합니다.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains(tags, "sale")'
JSON_CONTAINS_ALL(identifier, jsonExpr)
: JSON 표현식의 모든 요소가 존재하는지 확인합니다.
# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter='json_contains_all(tags, ["electronics", "sale", "new"])'
JSON_CONTAINS_ANY(identifier, jsonExpr)
: JSON 표현식에 요소가 하나 이상 존재하는 엔티티를 필터링합니다.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains_any(tags, ["electronics", "new", "clearance"])'
JSON 연산자에 대한 자세한 내용은 JSON 연산자를 참조하세요.
배열 필드별 연산자
Milvus는 배열 데이터를 세밀하게 제어할 수 있는 ARRAY_CONTAINS
, ARRAY_CONTAINS_ALL
, ARRAY_CONTAINS_ANY
, ARRAY_LENGTH
와 같은 배열 필드에 대한 고급 필터링 연산자를 제공합니다.
ARRAY_CONTAINS
: 특정 요소를 포함하는 엔티티를 필터링합니다.
filter="ARRAY_CONTAINS(history_temperatures, 23)"
ARRAY_CONTAINS_ALL
: 목록의 모든 요소가 있는 엔티티를 필터링합니다.
filter="ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])"
ARRAY_CONTAINS_ANY
: 목록의 모든 요소를 포함하는 엔터티를 필터링합니다.
filter="ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])"
ARRAY_LENGTH
: 배열의 길이를 기준으로 필터링합니다.
filter="ARRAY_LENGTH(history_temperatures) < 10"
배열 연산자에 대한 자세한 내용은 배열 연산자를 참조하십시오.
VARCHAR 필드별 연산자
Text_Match
연산자를 사용하면 특정 쿼리 용어를 기반으로 정확한 문서 검색이 가능합니다. 스칼라 필터와 벡터 유사도 검색을 결합하는 필터링 검색에 특히 유용합니다. 시맨틱 검색과 달리, 텍스트 일치는 정확한 용어 발생에 초점을 맞춥니다.
Milvus는 Tantivy를 사용해 역 인덱싱과 용어 기반 텍스트 검색을 지원합니다. 프로세스에는 다음이 포함됩니다.
분석기: 입력 텍스트를 토큰화하여 처리합니다.
인덱싱: 고유 토큰을 문서에 매핑하는 역 인덱스를 생성합니다.
자세한 내용은 텍스트 일치를 참조하세요.