필터 템플릿
Milvus에서 요소가 많은 복잡한 필터 표현식, 특히 CJK 문자 같은 비-ASCII 문자가 포함된 표현식은 쿼리 성능에 상당한 영향을 미칠 수 있습니다. 이를 해결하기 위해 Milvus는 복잡한 표현식을 파싱하는 데 소요되는 시간을 줄여 효율성을 높이기 위해 설계된 필터 표현식 템플릿 메커니즘을 도입했습니다. 이 페이지에서는 검색, 쿼리 및 삭제 작업에서 필터 표현식 템플릿을 사용하는 방법을 설명합니다.
개요
필터 표현식 템플릿 기능을 사용하면 자리 표시자를 포함한 필터 표현식을 생성할 수 있으며, 이 자리 표시자는 쿼리 실행 중에 값으로 동적으로 대체됩니다. 템플릿을 사용하면 큰 배열이나 복잡한 표현식을 필터에 직접 포함하지 않아도 되므로, 구문 분석 시간을 줄이고 쿼리 성능을 향상시킬 수 있습니다.
age 와 city 라는 두 필드가 포함된 필터 표현식이 있고, 나이가 25세 이상이며 “北京”(베이징) 또는 “上海”(상하이) 중 한 곳에 거주하는 모든 사람을 찾고자 한다고 가정해 봅시다. 필터 표현식에 값을 직접 포함시키는 대신 템플릿을 사용할 수 있습니다.
filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
여기서 {age} 과 {city} 은 쿼리가 실행될 때 filter_params 의 실제 값으로 대체될 자리 표시자입니다.
Milvus에서 필터 표현식 템플릿을 사용하면 다음과 같은 몇 가지 주요 이점이 있습니다:
파싱 시간 단축: 크거나 복잡한 필터 표현식을 자리 표시자로 대체함으로써, 시스템이 필터를 파싱하고 처리하는 데 소요되는 시간을 줄일 수 있습니다.
쿼리 성능 향상: 파싱 오버헤드가 줄어들어 쿼리 성능이 향상되며, 이는 더 높은 QPS와 더 빠른 응답 시간으로 이어집니다.
확장성: 데이터 세트가 증가하고 필터 표현식이 더 복잡해짐에 따라, 템플릿 기능을 통해 성능이 효율적이고 확장성 있게 유지됩니다.
검색 작업
Milvus의 검색 작업에서는 ` filter ` 표현식을 사용하여 필터링 조건을 정의하고, ` filter_params ` 매개변수를 사용하여 자리 표시자의 값을 지정합니다. ` filter_params ` 사전에는 Milvus가 필터 표현식 내에서 대체할 동적 값들이 포함되어 있습니다.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.search(
"hello_milvus",
vectors[:nq],
filter=expr,
limit=10,
output_fields=["age", "city"],
search_params={"metric_type": "COSINE", "params": {"search_list": 100}},
filter_params=filter_params,
)
이 예제에서 Milvus는 검색을 실행할 때 {age} 을 25 으로, {city} 을 ["北京", "上海"] 으로 동적으로 대체합니다.
쿼리 연산
동일한 템플릿 메커니즘을 Milvus의 쿼리 연산에도 적용할 수 있습니다. query 함수에서 필터 표현식을 정의하고, filter_params 를 사용하여 대체할 값을 지정합니다.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.query(
"hello_milvus",
filter=expr,
output_fields=["age", "city"],
filter_params=filter_params
)
filter_params 를 사용하면 Milvus는 값의 동적 삽입을 효율적으로 처리하여 쿼리 실행 속도를 향상시킵니다.
삭제 작업
삭제 작업에서도 필터 표현식 템플릿을 사용할 수 있습니다. 검색 및 쿼리와 마찬가지로, ` filter ` 표현식은 조건을 정의하고, ` filter_params `는 자리 표시자에 대한 동적 값을 제공합니다.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.delete(
"hello_milvus",
filter=expr,
filter_params=filter_params
)
이러한 접근 방식은 특히 복잡한 필터 조건을 처리할 때 삭제 작업의 성능을 향상시킵니다.
결론
필터 표현식 템플릿은 Milvus에서 쿼리 성능을 최적화하는 데 필수적인 도구입니다. 자리 표시자와 filter_params 사전(dictionary)을 사용하면 복잡한 필터 표현식을 파싱하는 데 소요되는 시간을 대폭 줄일 수 있습니다. 이를 통해 쿼리 실행 속도가 빨라지고 전반적인 성능이 향상됩니다.