クエリ後のフィルター (Filter) は、Tablestore 多次元インデックスの機能であり、クエリ結果に追加のフィルターを適用します。これにより、内部のクエリ オプティマイザーを手動でコントロールし、特定のクエリ条件を最終ステージで強制的に実行させることができます。この機能を正しく使用することで、クエリのパフォーマンスを大幅に向上させることができます。
クエリ後のフィルター機能を使用するには、Tablestore のテクニカルサポートに連絡してこの機能を有効にする必要があります。
機能紹介
クエリ後のフィルター (Filter) は、標準のクエリとは異なるクエリ構文を使用します。これは、クエリステージの後、集計および GroupBy ステージの前に実行されます。
主な目的は、クエリフローを手動でコントロールしてクエリのパフォーマンスを向上させることです。ヒット数の多いクエリ条件をクエリステージからフィルターステージに移動させることで、クエリのパフォーマンスを大幅に向上させることができます。
クエリステージ:範囲クエリ、term クエリ、あいまい検索、ジオクエリなど、すべての多次元インデックスクエリタイプとすべてのデータ型をサポートします。このステージでは、指定された条件に一致する初期データをインデックスから取得します。
フィルターステージ:クエリステージからの結果をフィルター処理します。このステージでは、キーワード、Long、Double のデータ型のみがサポートされます。サポートされるクエリタイプには、term クエリ、範囲クエリ、exists クエリが含まれます。
他のフィルタリングメソッドとの比較
Elasticsearch の post_filter との違い
両者の主な違いは、その効果の範囲です:
Tablestore における Filter の実行順序: クエリ → フィルター → 集計/TotalCount
Elasticsearch における post_filter の実行順序: クエリ → 集計/TotalCount → PostFilter
Tablestore BoolQuery のフィルターとの違い
BoolQuery のフィルターは must 句に似ており、クエリ自体のコンポーネントです。
制限事項
クエリ後のフィルターは、多次元インデックスクエリと併用する必要があります。サポートされているクエリタイプは、TermQuery、TermsQuery、RangeQuery、ExistsQuery、および BoolQuery です。
BoolQuery の場合、`mustQueries`、`mustNotQueries`、および `shouldQueries` 句はサポートされますが、`filterQueries` 句はサポートされません。
フィルター処理は、`enableSortAndAgg` プロパティが有効になっているキーワード、Long、および Double フィールドでのみサポートされます。
クエリ後のフィルターは、重みの設定をサポートしていません。