メインコンテンツまでスキップ
バージョン: User Guides (BYOC)

フィルターテンプレート

Zilliz Cloudでは、多数の要素を含む複雑なフィルター式、特にCJK文字などの非ASCII文字を含むフィルター式は、クエリパフォーマンスに大きな影響を与える可能性があります。これに対処するため、Zilliz Cloudは複雑な式の解析時間を短縮することで効率を向上させるために設計されたフィルター式テンプレートメカニズムを導入しています。このページでは、検索、クエリ、削除操作におけるフィルター式テンプレートの使用方法について説明します。

概要

フィルター式テンプレートを使用すると、プレースホルダーを含むフィルター式を作成でき、クエリ実行中に動的に値を置換できます。テンプレートを使用することで、フィルターに大きな配列や複雑な式を直接埋め込むことを避け、解析時間を短縮し、クエリパフォーマンスを向上させることができます。

例えば、agecityの2つのフィールドを含むフィルター式があり、年齢が25歳より大きく、「北京」(北京)または「上海」(上海)に住んでいるすべての人を見つけるとします。フィルター式に値を直接埋め込む代わりに、テンプレートを使用できます。

filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}

ここで、{age}および{city}はプレースホルダーであり、クエリ実行時にfilter_params内の実際の値に置き換えられます。

Zilliz Cloudでフィルター式テンプレートを使用するには、いくつかの重要な利点があります:

  • 解析時間の短縮: 大きなまたは複雑なフィルター式をプレースホルダーで置き換えることで、システムがフィルターの解析および処理に費やす時間が短縮されます。

  • クエリパフォーマンスの向上: 解析オーバーヘッドが削減されたため、クエリパフォーマンスが向上し、より高いQPSと迅速な応答時間を実現します。

  • スケーラビリティ: データセットが増加し、フィルター式が複雑になっても、テンプレートによりパフォーマンスが効率的でスケーラブルなまま維持されます。

検索操作

Zilliz Cloudの検索操作では、filter式を使用してフィルタリング条件を定義し、filter_paramsパラメータを使用してプレースホルダーの値を指定します。filter_params辞書には、Zilliz Cloudがフィルター式に置換するための動的値が含まれています。

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,
)

この例では、Zilliz Cloudは検索を実行する際に{age}25に、{city}["北京", "上海"]に動的に置換します。

クエリ操作

同じテンプレートメカニズムをZilliz Cloudのクエリ操作にも適用できます。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を使用することで、Zilliz Cloudは値の動的挿入を効率的に処理し、クエリ実行の速度を向上させます。

削除操作

削除操作でもフィルター式テンプレートを使用できます。検索およびクエリと同様に、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
)

この方法により、特に複雑なフィルター条件を処理する場合の削除操作のパフォーマンスが向上します。

結論

フィルター式テンプレートは、Zilliz Cloudのクエリパフォーマンスを最適化するための重要なツールです。プレースホルダーとfilter_params辞書を使用することで、複雑なフィルター式の解析に費やす時間を大幅に短縮できます。これにより、迅速なクエリ実行とより良い全体的なパフォーマンスが実現されます。