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

Tablestore:クエリ結果の折りたたみ

最終更新日:Jul 29, 2026

Tablestore SDK for Java を使用して多次元インデックスをクエリする際、指定したフィールドで結果を折りたたむことで、個別のフィールド値ごとに 1 行のみを返すことができます。

前提条件

Tablestore SDK for Java をインストールし、クライアントを初期化します。

仕組み

フィールドの折りたたみは、指定された多次元インデックスフィールドの値によって一致する行をグループ化し、各グループから代表的な 1 行を返します。各グループから返される行は、有効なソート順によって決まります。ソートとページネーションを使用してソート順を設定できます。フィールドの折りたたみはクエリ結果の表示方法のみを変更し、データテーブル内のデータは変更しません。

重要
  • 折りたたみフィールドでは、ソートと集約を有効にする必要があります。フィールドは、Keyword、Long、または Double 型の非配列フィールドである必要があります。

  • 折りたたみクエリは、limit と offset に基づくページネーションのみをサポートします。トークンベースのページネーションはサポートされていません。limitoffset の合計は 100000 を超えることはできません。

  • 集約とグループ化は、折りたたむ前の一致する結果に対して操作されます。合計行数も、折りたたむ前の一致する行数になります。折りたたみ後のグループの総数を取得することはできません。

search を呼び出してデータをクエリし、SearchQuery.collapse を設定して折りたたみフィールドを指定します。

SearchResponse search(SearchRequest request)

次の例では、すべての行をクエリし、category フィールドで結果を折りたたみ、price フィールドで降順にソートします。各カテゴリで最も価格の高い行が返されます。

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(new MatchAllQuery());
searchQuery.setLimit(10);
searchQuery.setCollapse(new Collapse("category"));
searchQuery.setSort(new Sort(
        Arrays.asList(new FieldSort("price", SortOrder.DESC))));

SearchRequest.ColumnsToGet columnsToGet =
        new SearchRequest.ColumnsToGet();
columnsToGet.setColumns(Arrays.asList("category", "price"));

SearchRequest request =
        new SearchRequest("example_table", "example_index", searchQuery);
request.setColumnsToGet(columnsToGet);

SearchResponse response = client.search(request);
System.out.println(response.getRows());

パラメーター

クエリリクエスト

request のタイプは SearchRequest です。次の表にそのパラメーターを示します。

名前

タイプ

説明

tableName (必須)

String

データテーブルの名前。

indexName (必須)

String

検索インデックスの名前。

searchQuery (必須)

SearchQuery

クエリ条件と折りたたみ構成。

columnsToGet (任意)

SearchRequest.ColumnsToGet

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

timeoutInMillisecond (任意)

int

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

routingValues (任意)

List<PrimaryKey>

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

クエリ構成

request.searchQuery のタイプは SearchQuery です。次の表にそのパラメーターを示します。

名前

タイプ

説明

query (必須)

Query

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

collapse (必須)

Collapse

折りたたみ構成。

offset (任意)

Integer

現在のクエリが開始されるグループの位置。デフォルト値:0。このパラメーターと limit の合計は 100000 を超えることはできません。

limit (任意)

Integer

返されるグループの最大数。デフォルト値:10。このパラメーターが 0 の場合、行は返されません。返されるすべての列が多次元インデックスから読み取られる場合の最大値は 1000、返される列のいずれかがデータテーブルから読み取られる必要がある場合は 100 です。

highlight (任意)

Highlight

まとめとハイライトの構成。ハイライトされた結果が返されるかどうかは、クエリタイプとインデックスフィールドの構成によって異なります。

sort (任意)

Sort

結果のソート順。各グループから返される代表的な行とグループの順序を決定します。このパラメーターが設定されていない場合、インデックスソートが使用されます。

trackTotalCount (任意)

int

カウントする一致する行の予想最大数。デフォルト値:TRACK_TOTAL_COUNT_DISABLED。カウントを無効にします。値を TRACK_TOTAL_COUNT に設定すると、折りたたむ前の一致するすべての行がカウントされます。値が小さいほど、クエリのパフォーマンスが向上します。

filter (任意)

SearchFilter

query の結果に適用されるフィルター。

aggregationList (任意)

List<Aggregation>

集約構成。集約は、折りたたむ前の一致する結果に対して操作されます。

groupByList (任意)

List<GroupBy>

グループ化構成。グループ化は、折りたたむ前の一致する結果に対して操作されます。

token (任意)

byte[]

ページネーショントークン。フィールドの折りたたみを使用する場合は、このパラメーターを設定しないでください。

折りたたみ構成

request.searchQuery.collapse のタイプは Collapse です。次の表にそのパラメーターを示します。

名前

タイプ

説明

fieldName (必須)

String

折りたたみフィールドの名前。このフィールドでは、ソートと集約を有効にする必要があります。また、フィールドは Keyword、Long、または Double 型の非配列フィールドである必要があります。

返される列

request.columnsToGet のタイプは SearchRequest.ColumnsToGet です。次の表にそのパラメーターを示します。

名前

タイプ

説明

columns (任意)

List<String>

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

returnAll (任意)

boolean

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

returnAllFromIndex (任意)

boolean

多次元インデックスに格納されているすべての属性列を返すかどうかを指定します。デフォルト値:false。このパラメーターと returnAll の両方を true に設定しないでください。

応答

search メソッドは SearchResponse を返します。次の表に、フィールドの折りたたみに関連するフィールドを示します。

名前

タイプ

説明

totalCount

long

折りたたむ前の一致する行数。getTotalCount() を呼び出して値を取得します。値は trackTotalCount に依存し、折りたたみ後のグループ数を示すものではありません。

rows

List<Row>

折りたたみ後の行。getRows() を呼び出して値を取得します。個別の折りたたみフィールド値ごとに最大 1 行が返されます。

searchHits

List<SearchHit>

折りたたみ後の検索ヒット。getSearchHits() を呼び出して値を取得します。

isAllSuccess

boolean

すべてのインデックスパーティションがクエリされたかどうかを示します。isAllSuccess() を呼び出して値を取得します。このフィールドが false の場合、応答には部分的な結果が含まれます。

aggregationResults

AggregationResults

折りたたむ前の一致する行から計算された集約結果。getAggregationResults() を呼び出して値を取得します。このフィールドは、aggregationList が設定されている場合にのみ返されます。

groupByResults

GroupByResults

折りたたむ前の一致する行から計算されたグループ化の結果。getGroupByResults() を呼び出して値を取得します。このフィールドは、groupByList が設定されている場合にのみ返されます。