全部產品
Search
文件中心

Tablestore:排序和翻頁

更新時間:Aug 12, 2026

使用 Tablestore Go SDK 按欄位值、相關性評分、主鍵或地理距離排序查詢結果,並通過 Token 連續翻頁。

前提條件

安裝Tablestore Go SDK並初始化用戶端。

功能說明

查詢時可以設定一個或多個排序器,系統按排序器列表的先後順序比較結果。未設定排序時使用建立多元索引時配置的 IndexSort;未配置 IndexSort 時預設按主鍵排序。IndexSort 僅支援 PrimaryKeySort 和 FieldSort。建立索引後,可通過動態修改 Schema修改 IndexSort。ScoreSort 按 BM25 演算法計算的相關性評分排序,必須顯式設定才會生效。

重要
  • 查詢時指定非主鍵排序器後,服務端預設追加主鍵排序器,使排序值相同的行保持確定的返回順序。DisableDefaultPkSorter 的預設值為 false。使用 Token 翻頁時不要禁用該行為;如果排序值重複且禁用主鍵排序,可能漏讀資料。

  • 包含 Nested 欄位的多元索引不支援 IndexSort。如果查詢此類索引時需要翻頁,必須在查詢請求中顯式設定排序,否則資料未讀取完時服務端不會返回 NextToken。

  • 使用 ScoreSort 時,FuzzyKeyword 欄位不參與排序,且 Weight 對 FuzzyKeyword 欄位無效。

searchQuery := search.NewSearchQuery().
    SetQuery(&search.MatchAllQuery{}).
    SetLimit(10).
    SetSort(&search.Sort{Sorters: []search.Sorter{
        &search.FieldSort{
            FieldName: "price",
            Order:     search.SortOrder_DESC.Enum(),
        },
    }})

for {
    response, err := client.Search(&tablestore.SearchRequest{
        TableName:   "example_table",
        IndexName:   "example_index",
        SearchQuery: searchQuery,
    })
    if err != nil {
        log.Fatal(err)
    }

    for _, row := range response.Rows {
        fmt.Println(row)
    }
    if len(response.NextToken) == 0 {
        break
    }
    searchQuery.SetToken(response.NextToken)
}

參數說明

排序配置

名稱

類型

說明

Sorters(必選)

[]search.Sorter

排序器列表,支援 FieldSort、ScoreSort、PrimaryKeySort 和 GeoDistanceSort。排序器按列表順序依次生效。DocSort 僅支援在 NestedQuery.InnerHits 中顯式設定,不能作為頂層 Search 的排序器。

DisableDefaultPkSorter(可選)

*bool

是否禁用服務端自動追加的主鍵排序器,預設值為 false。Go SDK 1.7.16 及以上版本支援該參數。

欄位值排序

名稱

類型

說明

FieldName(必選)

string

用於排序的欄位名稱。該欄位必須啟用排序與統計彙總。

Order(可選)

*search.SortOrder

排序方向,支援 search.SortOrder_ASC 和 search.SortOrder_DESC,預設升序。

Mode(可選)

*search.SortMode

多重值欄位參與排序的取值方式,支援 search.SortMode_Min、search.SortMode_Max 和 search.SortMode_Avg。

NestedFilter(可選)

*search.NestedFilter

Nested 子欄位排序配置。僅對 Nested 子欄位排序時設定。

MissingValue(可選)

interface{}

FieldName 和 MissingFields 指定的欄位均缺失時的排序值。設定為 search.FirstWhenMissing 時,無論升序或降序,缺失值均排在最前;設定為 search.LastWhenMissing 或 nil 時均排在最後。也可以設定與欄位類型一致的自訂值參與排序。

MissingField(可選)

*string

備用排序欄位。該參數已廢棄,請使用 MissingFields。

MissingFields(可選)

[]string

備用排序欄位列表。FieldName 指定的欄位缺失時,按列表順序使用首個存在的欄位值參與排序。最多設定 3 個,且欄位類型必須與 FieldName 指定的欄位相同,所有欄位都必須啟用排序與統計彙總。Go SDK 1.9.0 及以上版本支援該參數。

Nested 過濾

名稱

類型

說明

Path(必選)

string

Nested 欄位路徑。

Filter(必選)

search.Query

篩選參與排序的 Nested 子行的查詢條件。設定為 MatchAllQuery 時使用全部子行。

相關性評分、主鍵和文檔順序排序

名稱

類型

說明

ScoreSort.Order(可選)

*search.SortOrder

BM25 相關性評分的排序方向。search.NewScoreSort() 預設按評分降序排列。

PrimaryKeySort.Order(可選)

*search.SortOrder

主鍵排序方向。search.NewPrimaryKeySort() 預設按主鍵升序排列。

DocSort.SortOrder(可選)

*search.SortOrder

NestedQuery.InnerHits 內部文檔的排序方向,預設升序。Go SDK 1.7.12 及以上版本支援 DocSort。

地理距離排序

名稱

類型

說明

FieldName(必選)

string

Geo-point 欄位名稱。

Points(必選)

[]string

用於計算距離的目標點列表。座標使用 緯度,經度 格式,緯度範圍為 [-90,+90],經度範圍為 [-180,+180],例如 35.8,-45.91

Order(可選)

*search.SortOrder

距離排序方向。search.SortOrder_ASC 表示由近到遠,search.SortOrder_DESC 表示由遠到近。

Mode(可選)

*search.SortMode

存在多個距離時參與排序的取值方式,支援 search.SortMode_Min、search.SortMode_Max 和 search.SortMode_Avg。

GeoDistanceType(可選)

*search.GeoDistanceType

距離計算方式。search.GeoDistanceType_ARC 按球面計算,精度較高;search.GeoDistanceType_PLANE 按平面計算,計算量較小。預設值為 ARC。

NestedFilter(可選)

*search.NestedFilter

Nested 子欄位排序時的路徑和過濾條件。

翻頁配置

名稱

類型

說明

Limit(可選)

int32

每頁返回的最大行數,預設值為 10。通常最大值為 100;如果返回列均儲存在多元索引中,最大值可提高到 1000,具體請參見如何將多元索引 Search 介面查詢資料的 limit 提高到 1000。使用 Offset 翻頁時,Offset + Limit 不能超過 100000。

Offset(可選)

int32

起始位置,預設值為 0,適合不超過 100000 行的淺翻頁。

Token(可選)

[]byte

上一頁響應中的 NextToken,適合連續深度翻頁。調用 SetToken 會清除 Sort,因為 Token 已包含上一頁的排序條件;使用 Token 翻頁時不能設定 Offset。如需將二進位 Token 持久化或通過文本協議、跨進程傳輸,使用 Base 64 編碼。

Token 預設只能向後翻頁。如需返回上一頁,可以緩衝之前響應的 Token 並重新使用。Token 翻頁深度不受 100000 行限制。

傳回值

名稱

類型

說明

Rows

[]*tablestore.Row

本次查詢返回的行,數量不超過 Limit。

SearchHits

[]*tablestore.SearchHit

查詢命中結果。使用相關性評分、摘要與高亮或 Nested InnerHits 時從該欄位讀取。

TotalCount

int64

匹配總行數。傳回值取決於 SetGetTotalCount 配置,不是本頁返回行數。

NextToken

[]byte

下一頁憑證。值為空白表示沒有更多資料,或當前查詢沒有確定的排序方式。

IsAllSuccess

bool

是否已成功查詢全部索引分割區。值為 false 時返回的是部分結果。