すべてのプロダクト
Search
ドキュメントセンター

Tablestore:Use post-query filters

最終更新日:Jul 29, 2026

Tablestore SDK for Java でクエリ後フィルターを使用すると、メインクエリの結果をさらにフィルター処理し、後で実行するのに適した条件をメインクエリから分離できます。

前提条件

  • Tablestore SDK for Java をインストールし、クライアントを初期化していること。

  • Tablestore SDK for Java 5.17.5 以降を使用していること。

仕組み

クエリ後フィルター (SearchFilter) は、メインクエリ (query) の実行後に候補行をさらにフィルター処理します。その後、フィルター処理された結果から集約とグループ化が計算されます。後で実行するのに適した条件をメインクエリから分離することで、メインクエリ中に複雑な条件を評価するコストを削減できます。実際のパフォーマンス上のメリットは、メインクエリとフィルター条件の選択性によって異なります。

クエリ後フィルターを使用するには、search を呼び出し、SearchQuery でメインクエリと SearchFilter を個別に構成します。メインクエリは、多次元インデックスが提供するクエリタイプをサポートします。クエリ後フィルターは、特定のクエリタイプとフィールドタイプのみをサポートします。詳細については、「制限事項」をご参照ください。

SearchResponse search(SearchRequest request)

次の例では、まず TermsQuery を使用して category フィールドの値が book である行をクエリします。次に、クエリ後フィルターを使用して、score_long フィールドの値が 1 より大きく 10 未満の行を保持します。

String tableName = "example_table";
String indexName = "example_index";

// Configure the main query.
TermsQuery termsQuery = new TermsQuery();
termsQuery.setFieldName("category");
termsQuery.addTerm(ColumnValue.fromString("book"));

// Configure the post-query filter.
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("score_long");
rangeQuery.setFrom(ColumnValue.fromLong(1));
rangeQuery.setIncludeLower(false);
rangeQuery.setTo(ColumnValue.fromLong(10));
rangeQuery.setIncludeUpper(false);

SearchFilter searchFilter = new SearchFilter();
searchFilter.setQuery(rangeQuery);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(termsQuery);
searchQuery.setFilter(searchFilter);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet =
        new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAllFromIndex(true);
request.setColumnsToGet(columnsToGet);

SearchResponse response = client.search(request);
System.out.println("Total count: " + response.getTotalCount());
System.out.println("Rows: " + response.getRows());

制限事項

  • クエリ後フィルターは、メインクエリと併用する必要があります。クエリ後フィルターが実行される前に候補行の数を減らすようにメインクエリを構成してください。多次元インデックス内のすべての行をフィルター処理する必要がある場合を除き、メインクエリを MatchAllQuery に設定しないでください。

  • クエリ後フィルターは、TermQueryTermsQueryRangeQueryExistsQuery、およびこれらのクエリタイプで構成される BoolQuery 条件のみをサポートします。

  • クエリ後フィルターとして使用される BoolQuery では、mustQueriesmustNotQueries、および shouldQueries のみがサポートされます。filterQueries はサポートされていません。

  • フィルター処理できるのは、KeywordLong、および Double フィールドのみです。これらのフィールドに対して enableSortAndAgg を有効にする必要があります。

  • クエリ後フィルターの条件は、関連度スコアの計算には関与しません。フィルター条件に weight を設定しても、クエリ結果の関連度スコアは変更されません。

パラメーター

検索リクエスト

request は、次のパラメーターを含む SearchRequest オブジェクトです。

名前

説明

tableName (必須)

String

テーブルの名前。

indexName (必須)

String

検索インデックスの名前

searchQuery (必須)

SearchQuery

メインクエリ、クエリ後フィルター、および共通のクエリ設定。

columnsToGet (任意)

SearchRequest.ColumnsToGet

返される列。このパラメーターが指定されていない場合、プライマリキー列のみが返されます。

timeoutInMillisecond (任意)

int

リクエストレベルのクエリタイムアウト (ミリ秒単位)。デフォルト値は -1 で、リクエストレベルのタイムアウトが設定されていないことを示します。

routingValues (任意)

List<PrimaryKey>

カスタムルーティングフィールドのプライマリキー値。カスタムルーティングを使用しない場合は、このパラメーターを構成する必要はありません。

クエリ設定

request.searchQuery は、次のパラメーターを含む SearchQuery オブジェクトです。

名前

説明

query (必須)

Query

メインクエリの条件。多次元インデックスのクエリタイプがサポートされています。

filter (必須)

SearchFilter

メインクエリの実行後に候補行をさらにフィルター処理するクエリ後フィルター。

offset (任意)

Integer

クエリを開始するオフセット。

limit (任意)

Integer

返される行の最大数。このパラメーターを 0 に設定すると、行は返されません。

highlight (任意)

Highlight

Text フィールドのまとめとハイライト設定。構成の詳細については、「まとめとハイライト」をご参照ください。

collapse (任意)

Collapse

フィールドによってクエリ結果を重複排除するために使用されるフィールドの折りたたみ設定。構成の詳細については、「クエリ結果の折りたたみ」をご参照ください。

sort (任意)

Sort

クエリ結果のソート順。構成の詳細については、「結果のソートとページ分割」をご参照ください。

trackTotalCount (任意)

int

カウントする一致行の最大数。デフォルト値は TRACK_TOTAL_COUNT_DISABLED で、一致する行がカウントされないことを示します。このパラメーターを TRACK_TOTAL_COUNT に設定すると、すべての一致する行がカウントされます。値を小さくすると、クエリのパフォーマンスが向上します。

aggregationList (任意)

List<Aggregation>

集約設定。集約は、クエリ後フィルターの結果から計算されます。構成の詳細については、「集約」をご参照ください。

groupByList (任意)

List<GroupBy>

グループ化設定。グループ化は、クエリ後フィルターの結果から計算されます。構成の詳細については、「集約」をご参照ください。

token (任意)

byte[]

ページネーショントークン。次のページを読み取るには、このパラメーターを前のリクエストによって返された nextToken の値に設定します。token が設定されると、ページネーショントークンにはすでにソート条件が含まれているため、SDK は sort をクリアします。

クエリ後フィルター

request.searchQuery.filter は、次のパラメーターを含む SearchFilter オブジェクトです。

名前

説明

query (必須)

Query

フィルター条件。TermQueryTermsQueryRangeQueryExistsQuery、およびこれらのクエリタイプで構成される BoolQuery 条件がサポートされています。

返される列

request.columnsToGet は、次のパラメーターを含む SearchRequest.ColumnsToGet オブジェクトです。

名前

説明

columns (任意)

List<String>

返される属性列。このパラメーターは、returnAllreturnAllFromIndex の両方が false の場合にのみ構成します。このパラメーターが指定されていない場合、プライマリキー列のみが返されます。

returnAll (任意)

boolean

テーブル内のすべての属性列を返すかどうかを指定します。デフォルト値:false

returnAllFromIndex (任意)

boolean

インデックス付けされたすべての属性列を返すかどうかを指定します。デフォルト値:false。このパラメーターと returnAll の両方を true に設定することはできません。

応答

searchSearchResponse オブジェクトを返します。次の表に、コアフィールドを示します。

名前

説明

totalCount

long

クエリ後フィルターに一致する行の数。getTotalCount() を使用して取得します。値は trackTotalCount の設定によって異なります。

rows

List<Row>

現在のリクエストによって返された行。getRows() を使用して取得します。行数は limit を超えません。

searchHits

List<SearchHit>

検索ヒット。getSearchHits() を使用して取得します。

aggregationResults

AggregationResults

クエリ後フィルターの結果から計算された集約結果。getAggregationResults() を使用して取得します。

groupByResults

GroupByResults

クエリ後フィルターの結果から計算されたグループ化の結果。getGroupByResults() を使用して取得します。

nextToken

byte[]

次のページのトークン。getNextToken() を使用して取得します。値が null でない場合は、次のリクエストでその値を token として使用します。

isAllSuccess

boolean

すべてのインデックスパーティションがクエリされたかどうかを示します。isAllSuccess() を使用して取得します。値が false の場合、部分的な結果が返され、totalCount が実際の一致行数より少なくなることがあります。