필터 템플릿
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
사전을 사용하면 복잡한 필터 표현식을 구문 분석하는 데 소요되는 시간을 크게 줄일 수 있습니다. 이는 쿼리 실행 속도와 전반적인 성능 향상으로 이어집니다.