Tablestore SDK for Java を使用して多次元インデックスをクエリする際、指定したフィールドで結果を折りたたむことで、個別のフィールド値ごとに 1 行のみを返すことができます。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
仕組み
フィールドの折りたたみは、指定された多次元インデックスフィールドの値によって一致する行をグループ化し、各グループから代表的な 1 行を返します。各グループから返される行は、有効なソート順によって決まります。ソートとページネーションを使用してソート順を設定できます。フィールドの折りたたみはクエリ結果の表示方法のみを変更し、データテーブル内のデータは変更しません。
折りたたみフィールドでは、ソートと集約を有効にする必要があります。フィールドは、Keyword、Long、または Double 型の非配列フィールドである必要があります。
折りたたみクエリは、limit と offset に基づくページネーションのみをサポートします。トークンベースのページネーションはサポートされていません。
limitとoffsetの合計は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 |
リクエストレベルのクエリタイムアウト (ミリ秒単位) 。デフォルト値は |
|
routingValues (任意) |
|
カスタムルートフィールドのプライマリキー値。カスタムルーティングを使用しない場合は、このパラメーターを設定する必要はありません。 |
クエリ構成
request.searchQuery のタイプは SearchQuery です。次の表にそのパラメーターを示します。
|
名前 |
タイプ |
説明 |
|
query (必須) |
Query |
クエリ条件。検索インデックスのクエリタイプがサポートされています。 |
|
collapse (必須) |
Collapse |
折りたたみ構成。 |
|
offset (任意) |
Integer |
現在のクエリが開始されるグループの位置。デフォルト値: |
|
limit (任意) |
Integer |
返されるグループの最大数。デフォルト値: |
|
highlight (任意) |
Highlight |
まとめとハイライトの構成。ハイライトされた結果が返されるかどうかは、クエリタイプとインデックスフィールドの構成によって異なります。 |
|
sort (任意) |
Sort |
結果のソート順。各グループから返される代表的な行とグループの順序を決定します。このパラメーターが設定されていない場合、インデックスソートが使用されます。 |
|
trackTotalCount (任意) |
int |
カウントする一致する行の予想最大数。デフォルト値: |
|
filter (任意) |
SearchFilter |
|
|
aggregationList (任意) |
|
集約構成。集約は、折りたたむ前の一致する結果に対して操作されます。 |
|
groupByList (任意) |
|
グループ化構成。グループ化は、折りたたむ前の一致する結果に対して操作されます。 |
|
token (任意) |
byte[] |
ページネーショントークン。フィールドの折りたたみを使用する場合は、このパラメーターを設定しないでください。 |
折りたたみ構成
request.searchQuery.collapse のタイプは Collapse です。次の表にそのパラメーターを示します。
|
名前 |
タイプ |
説明 |
|
fieldName (必須) |
String |
折りたたみフィールドの名前。このフィールドでは、ソートと集約を有効にする必要があります。また、フィールドは Keyword、Long、または Double 型の非配列フィールドである必要があります。 |
返される列
request.columnsToGet のタイプは SearchRequest.ColumnsToGet です。次の表にそのパラメーターを示します。
|
名前 |
タイプ |
説明 |
|
columns (任意) |
|
返される属性列の名前。このパラメーターは、 |
|
returnAll (任意) |
boolean |
データテーブル内のすべての属性列を返すかどうかを指定します。デフォルト値: |
|
returnAllFromIndex (任意) |
boolean |
多次元インデックスに格納されているすべての属性列を返すかどうかを指定します。デフォルト値: |
応答
search メソッドは SearchResponse を返します。次の表に、フィールドの折りたたみに関連するフィールドを示します。
|
名前 |
タイプ |
説明 |
|
totalCount |
long |
折りたたむ前の一致する行数。 |
|
rows |
|
折りたたみ後の行。 |
|
searchHits |
|
折りたたみ後の検索ヒット。 |
|
isAllSuccess |
boolean |
すべてのインデックスパーティションがクエリされたかどうかを示します。 |
|
aggregationResults |
AggregationResults |
折りたたむ前の一致する行から計算された集約結果。 |
|
groupByResults |
GroupByResults |
折りたたむ前の一致する行から計算されたグループ化の結果。 |