JSON 연산자
Milvus는 JSON 필드 쿼리 및 필터링을 위한 고급 연산자를 지원하므로 복잡한 구조화된 데이터를 관리하는 데 적합합니다. 이러한 연산자를 사용하면 JSON 문서를 매우 효과적으로 쿼리할 수 있으므로 JSON 필드 내의 특정 요소, 값 또는 조건에 따라 엔티티를 검색할 수 있습니다. 이 섹션에서는 Milvus에서 JSON 전용 연산자를 사용하는 방법을 안내하고, 그 기능을 설명하기 위한 실제 예제를 제공합니다.
JSON 필드는 복잡한 중첩 구조를 처리할 수 없으며 모든 중첩 구조를 일반 문자열로 취급합니다. 따라서 JSON 필드로 작업할 때는 지나치게 깊은 중첩을 피하고 최적의 성능을 위해 데이터 구조가 가능한 한 평평한지 확인하는 것이 좋습니다.
사용 가능한 JSON 연산자
Milvus는 JSON 데이터를 필터링하고 쿼리하는 데 도움이 되는 몇 가지 강력한 JSON 연산자를 제공하며, 이러한 연산자는 다음과 같습니다.
JSON_CONTAINS(identifier, expr)
: 필드 내에서 지정된 JSON 표현식이 있는 엔티티를 필터링합니다.JSON_CONTAINS_ALL(identifier, expr)
: 지정된 JSON 표현식의 모든 요소가 필드에 있는지 확인합니다.JSON_CONTAINS_ANY(identifier, expr)
: 필드 내에 JSON 표현식의 멤버가 하나 이상 존재하는 엔티티를 필터링합니다.
이러한 연산자를 예제를 통해 살펴보고 실제 시나리오에서 어떻게 적용될 수 있는지 알아보겠습니다.
JSON_CONTAINS
json_contains
연산자는 JSON 필드 내에 특정 요소 또는 하위 배열이 존재하는지 확인합니다. JSON 배열이나 객체에 특정 값이 포함되어 있는지 확인하고자 할 때 유용합니다.
예제
각각 ["electronics", "sale", "new"]
과 같은 문자열의 JSON 배열을 포함하는 tags
필드가 있는 제품 컬렉션이 있다고 가정해 보겠습니다. "sale"
태그가 있는 제품을 필터링하려고 합니다.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter = 'json_contains(tags, "sale")'
이 예제에서 Milvus는 tags
필드에 "sale"
요소가 포함된 모든 제품을 반환합니다.
JSON_contains_all
json_contains_all
연산자는 지정된 JSON 표현식의 모든 요소가 대상 필드에 있는지 확인합니다. 이 연산자는 JSON 배열 내에서 여러 값을 일치시켜야 할 때 특히 유용합니다.
예제
제품 태그 시나리오를 계속 진행하면서 "electronics"
, "sale"
, "new"
태그가 있는 모든 제품을 찾으려면 json_contains_all
연산자를 사용할 수 있습니다.
# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter = 'json_contains_all(tags, ["electronics", "sale", "new"])'
이 쿼리는 tags
배열에 지정된 세 가지 요소가 모두 포함된 모든 제품을 반환합니다: "electronics"
, "sale"
, "new"
을 모두 반환합니다.
json_cotains_any
json_contains_any
연산자는 필드 내에 JSON 표현식의 멤버가 하나 이상 존재하는 엔티티를 필터링합니다. 이 연산자는 여러 가능한 값 중 하나를 기준으로 엔티티를 일치시키려는 경우에 유용합니다.
예제
"electronics"
, "sale"
, "new"
태그 중 하나 이상이 있는 제품을 필터링하고 싶다고 가정해 보겠습니다. json_contains_any
연산자를 사용하여 이를 수행할 수 있습니다.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter = 'json_contains_any(tags, ["electronics", "new", "clearance"])'
이 경우 Milvus는 목록에 ["electronics", "new", "clearance"]
태그 중 하나 이상의 태그가 있는 모든 제품을 반환합니다. 제품에 이러한 태그 중 하나만 있는 경우에도 결과에 포함됩니다.