フィルタのテンプレート化
Milvusでは、多数の要素を含む複雑なフィルタ式、特にCJK文字などの非ASCII文字を含むものは、クエリのパフォーマンスに大きな影響を与える可能性があります。この問題に対処するため、Milvusでは、複雑な式の解析にかかる時間を短縮することで効率を向上させることを目的とした、フィルタ式のテンプレート化メカニズムを導入しています。このページでは、検索、クエリ、および削除操作におけるフィルタ式のテンプレート化の使用方法について説明します。
概要
フィルタ式のテンプレート機能を使用すると、プレースホルダーを含むフィルタ式を作成でき、クエリの実行時にそのプレースホルダーを動的に値に置き換えることができます。テンプレート機能を使用することで、大きな配列や複雑な式をフィルタに直接埋め込む必要がなくなり、解析時間を短縮してクエリのパフォーマンスを向上させることができます。
たとえば、age とcity の 2 つのフィールドを含むフィルタ式があり、年齢が 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 辞書を使用することで、複雑なフィルタ式の解析にかかる時間を大幅に短縮できます。これにより、クエリの実行が高速化され、全体的なパフォーマンスが向上します。