全部產品
Search
文件中心

Tablestore:摺疊(去重)

更新時間:Jul 29, 2026

使用 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

請求級查詢逾時時間,單位為毫秒。預設值為 -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>

要返回的屬性列名稱。僅 returnAll 和 returnAllFromIndex 均為 false 時需要設定;未設定時只返回主鍵列。

returnAll(可選)

boolean

是否返回資料表中的全部屬性列。預設值為 false。

returnAllFromIndex(可選)

boolean

是否返回多元索引中已儲存的全部屬性列。預設值為 false。不能與 returnAll 同時設定為 true。

傳回值

search 方法返回 SearchResponse,與摺疊功能相關的核心欄位如下。

名稱

類型

說明

totalCount

long

摺疊前的匹配行數,通過 getTotalCount() 擷取。傳回值取決於 trackTotalCount 配置,不表示摺疊後的分組數。

rows

List<Row>

摺疊後的行資料,通過 getRows() 擷取,每個不同的摺疊欄位值最多返回一行。

searchHits

List<SearchHit>

摺疊後的查詢命中結果,通過 getSearchHits() 擷取。

isAllSuccess

boolean

是否已成功查詢全部索引分割區,通過 isAllSuccess() 擷取。值為 false 時返回部分結果。

aggregationResults

AggregationResults

摺疊前匹配結果的統計彙總結果,通過 getAggregationResults() 擷取。僅配置 aggregationList 時返回。

groupByResults

GroupByResults

摺疊前匹配結果的分組結果,通過 getGroupByResults() 擷取。僅配置 groupByList 時返回。