フィルタテンプレート
Milvusでは、多数の要素を含む複雑なフィルタ式、特に日中韓文字のような非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
辞書を使用することで、複雑なフィルタ式の解析にかかる時間を大幅に短縮することができます。これにより、問い合わせの実行が速くなり、全体的なパフォーマンスが向上します。