使用 Tablestore Java SDK 可按指定多元索引欄位摺疊查詢結果,使每個不同欄位值只返回一行資料。
前提條件
安裝Tablestore Java SDK並初始化用戶端。
功能說明
摺疊功能按照指定多元索引欄位的值對匹配行分組,每個分組只返回一行代表資料。分組內返回哪一行由查詢的實際排序方式決定,可通過排序和翻頁設定排序方式。摺疊只改變查詢結果的展示方式,不會修改資料表中的資料。
摺疊欄位必須在建立多元索引時啟用排序與統計彙總,只支援 Keyword、Long 和 Double 類型的非數組欄位。
摺疊查詢只能使用 limit 和 offset 翻頁,不能使用 token。
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 |
摺疊前匹配結果的分組結果,通過 |