全部产品
Search
文档中心

Tablestore:Pengurutan dan halaman dalam

更新时间:Jun 24, 2025

Saat menggunakan indeks pencarian untuk mengquery data, Anda dapat memanfaatkan metode pengurutan yang telah ditentukan sebelumnya atau menentukan metode pengurutan sendiri. Hasil query akan dikembalikan sesuai dengan urutan yang telah ditentukan. Jika respons mencakup banyak baris, Anda dapat menemukan data yang diperlukan dengan mengonfigurasi parameter Limit dan Offset atau menggunakan token.

Skenario

Kategori

Metode

Fitur

Skenario

Pengurutan

Tentukan metode pengurutan saat membuat indeks pencarian

Pengurutan Pra-indeks (IndexSort)

Secara default, data dalam indeks pencarian diurutkan berdasarkan pengaturan pra-pengurutan dari parameter IndexSort. Pengaturan ini menentukan urutan default hasil query.

Tentukan metode pengurutan saat mengquery data

Pengurutan Berdasarkan Skor Relevansi Kata Kunci BM25 (ScoreSort)

Gunakan ScoreSort untuk mengurutkan hasil query berdasarkan skor relevansi kata kunci BM25. Metode ini cocok untuk pencarian teks lengkap.

Pengurutan Berdasarkan Nilai Kunci Utama (PrimaryKeySort)

Gunakan PrimaryKeySort untuk mengurutkan hasil query berdasarkan nilai kunci utama. Cocok untuk mengurutkan data berdasarkan pengenal unik.

Pengurutan Berdasarkan Nilai Satu atau Lebih Kolom (FieldSort)

Gunakan FieldSort untuk mengurutkan hasil query berdasarkan satu atau lebih kolom. Cocok untuk industri seperti e-commerce dan jejaring sosial.

Pengurutan Berdasarkan Lokasi Geografis (GeoDistanceSort)

Gunakan GeoDistanceSort untuk mengurutkan hasil query berdasarkan lokasi geografis. Cocok untuk pemetaan dan logistik.

Halaman Dalam

Tentukan metode halaman dalam saat mengquery data

Halaman Dalam Berdasarkan Parameter Limit dan Offset

Jika jumlah baris dalam respons kurang dari 100.000, gunakan metode ini untuk melompat ke halaman tertentu.

Halaman Dalam Berdasarkan Token

Secara default, hanya bisa mundur saat menggunakan token. Namun, Anda dapat menyimpan dan menggunakan token sebelumnya untuk maju karena token valid selama query.

Pra-pengurutan indeks

Secara default, data dalam indeks pencarian diurutkan berdasarkan pengaturan pra-pengurutan dari parameter IndexSort. Saat menggunakan indeks pencarian untuk mengquery data, pengaturan ini menentukan urutan default hasil query.

Saat membuat indeks pencarian, Anda dapat menentukan pengaturan pra-pengurutan dengan mengonfigurasi parameter IndexSort. Jika tidak ditentukan, data diurutkan berdasarkan nilai kunci utama.

null
  • Anda dapat menentukan PrimaryKeySort atau FieldSort sebagai metode pra-pengurutan. PrimaryKeySort mengurutkan berdasarkan nilai kunci utama, sedangkan FieldSort berdasarkan nilai bidang.

  • Indeks pencarian yang berisi bidang Nested tidak mendukung pra-pengurutan indeks.

  • Untuk memodifikasi pengaturan parameter IndexSort pada indeks pencarian yang ada, lihat Modifikasi Skema Indeks Pencarian Secara Dinamis.

Tentukan metode pengurutan saat mengquery data

Pengurutan hanya dapat diaktifkan untuk bidang dengan parameter EnableSortAndAgg disetel ke true.

Anda dapat menentukan metode pengurutan untuk setiap query. Query berbasis indeks pencarian mendukung beberapa metode pengurutan berikut, yang dapat dikombinasikan berdasarkan prioritas.

ScoreSort

Gunakan ScoreSort untuk mengurutkan hasil query berdasarkan skor relevansi kata kunci BM25. Cocok untuk pencarian teks lengkap.

null
  • Sebelum menggunakan ScoreSort, konfigurasikan parameternya. Jika tidak, hasil query akan diurutkan berdasarkan pengaturan pra-pengurutan dari parameter IndexSort.

  • Bidang bertipe FuzzyKeyword tidak digunakan untuk pengurutan, dan pengaturan bobot tidak berlaku untuk bidang tersebut.

// Komentar dalam bahasa Indonesia
// Urutkan hasil query dalam urutan menurun berdasarkan skor.
searchQuery := search.NewSearchQuery()
searchQuery.SetSort(&search.Sort{
    []search.Sorter{
        &search.ScoreSort{
            Order: search.SortOrder_DESC.Enum(), // Urutkan hasil query dalam urutan menurun berdasarkan skor. 
        },
    },
})

PrimaryKeySort

Gunakan PrimaryKeySort untuk mengurutkan hasil query berdasarkan nilai kunci utama.

// Komentar dalam bahasa Indonesia
// Urutkan hasil query berdasarkan nilai kunci utama dalam urutan naik.
searchQuery := search.NewSearchQuery()
searchQuery.SetSort(&search.Sort{
    []search.Sorter{
        &search.PrimaryKeySort{
            Order: search.SortOrder_ASC.Enum(),
        },
    },
})

FieldSort

Gunakan FieldSort untuk mengurutkan hasil query berdasarkan nilai satu atau lebih kolom tertentu.

Urutkan hasil query berdasarkan nilai satu kolom

Gunakan FieldSort untuk mengurutkan hasil query berdasarkan nilai kolom tertentu.

// Komentar dalam bahasa Indonesia
// Urutkan hasil query berdasarkan nilai kolom Col_Long dalam urutan menurun.
searchQuery.SetSort(&search.Sort{
    []search.Sorter{
        &search.FieldSort{
            FieldName: "Col_Long",
            Order:     search.SortOrder_DESC.Enum(),
        },
    },
})

Urutkan hasil query berdasarkan nilai beberapa kolom

Gunakan FieldSort untuk mengurutkan hasil query berdasarkan dua kolom dalam urutan tertentu.

// Komentar dalam bahasa Indonesia
// Urutkan hasil query berdasarkan nilai col1 dalam urutan naik dan col2 dalam urutan menurun.
searchQuery.SetSort(&search.Sort{
    []search.Sorter{
        &search.FieldSort{
            FieldName: "col1",
            Order:     search.SortOrder_ASC.Enum(),
        },
        &search.FieldSort{
            FieldName: "col2",
            Order:     search.SortOrder_DESC.Enum(),
        },
    },
})

GeoDistanceSort

Gunakan GeoDistanceSort untuk mengurutkan hasil query berdasarkan lokasi geografis.

// Komentar dalam bahasa Indonesia
// Tentukan nama bidang GEOPOINT dan koordinat titik pusat.
searchQuery.SetSort(&search.Sort{
    []search.Sorter{
        &search.GeoDistanceSort{
            FieldName: "location",   // Tentukan nama bidang GEOPOINT. 
            Points:    []string{"40,-70"}, // Tentukan pasangan koordinat titik pusat. 
        },
    },
})

Tentukan metode halaman dalam

Anda dapat mengonfigurasi parameter Limit dan Offset atau menggunakan token untuk membagi baris dalam respons menjadi halaman-halaman.

Halaman dalam berdasarkan parameter Limit dan Offset

Jika jumlah total baris dalam respons kurang dari 100.000, gunakan parameter Limit dan Offset untuk membagi baris menjadi halaman-halaman. Jumlah dari nilai parameter Limit dan Offset tidak boleh melebihi 100.000. Nilai maksimum parameter Limit adalah 100.

null

Untuk informasi tentang cara meningkatkan nilai maksimum parameter Limit, lihat Bagaimana Cara Meningkatkan Nilai Parameter Limit Menjadi 1000 Saat Memanggil Operasi Search Fitur Indeks Pencarian?.

Jika tidak menentukan nilai untuk parameter Limit dan Offset, nilai default akan digunakan. Nilai default parameter Limit adalah 10, dan nilai default parameter Offset adalah 0.

// Komentar dalam bahasa Indonesia
// Setel Limit menjadi 10 dan Offset menjadi 10.
searchQuery := search.NewSearchQuery()
searchQuery.SetLimit(10)
searchQuery.SetOffset(10) 

Halaman dalam berdasarkan token

Kami merekomendasikan penggunaan token untuk halaman dalam yang dalam karena metode ini tidak memiliki batasan pada kedalaman halaman.

Jika Tablestore tidak dapat membaca semua data yang memenuhi kondisi query, Tablestore mengembalikan NextToken. Gunakan NextToken untuk melanjutkan membaca data berikutnya.

Secara default, Anda hanya bisa mundur saat menggunakan token. Namun, Anda dapat menyimpan dan menggunakan token sebelumnya untuk maju karena token valid selama query.

null

Jika ingin menyimpan NextToken atau mentransfernya ke halaman frontend, gunakan Base64 untuk mengkodekan NextToken menjadi string. Token bukanlah string. Jika menggunakan string(NextToken), informasi tentang token hilang.

Saat menggunakan token, metode pengurutan sama dengan metode yang digunakan dalam permintaan sebelumnya. Tablestore mengurutkan data berdasarkan parameter IndexSort secara default atau berdasarkan metode yang Anda tentukan. Anda tidak dapat menentukan metode pengurutan atau mengonfigurasi parameter Offset saat menggunakan token. Data dikembalikan halaman demi halaman secara berurutan, yang dapat menghasilkan query yang lambat.

null

Indeks pencarian yang berisi bidang Nested tidak mendukung IndexSort. Jika memerlukan halaman dalam dan menggunakan indeks pencarian yang berisi bidang Nested, tentukan metode pengurutan dalam kondisi query untuk mengembalikan data dalam urutan yang ditentukan. Jika tidak, Tablestore tidak mengembalikan NextToken ketika hanya sebagian data yang memenuhi kondisi query dikembalikan.

// Komentar dalam bahasa Indonesia
// Gunakan token untuk membaca data halaman demi halaman.
func QueryRowsWithToken(client *tablestore.TableStoreClient, tableName string, indexName string) {
    querys := []search.Query{
        &search.MatchAllQuery{},
        &search.TermQuery{
            FieldName: "Col_Keyword",
            Term:      "tablestore",
        },
    }
    for _, query := range querys {
        fmt.Printf("Test query: %#v\n", query)
        searchRequest := &tablestore.SearchRequest{}
        searchRequest.SetTableName(tableName)
        searchRequest.SetIndexName(indexName)
        searchQuery := search.NewSearchQuery()
        searchQuery.SetQuery(query)
        searchQuery.SetLimit(10)
        searchQuery.SetGetTotalCount(true)
        searchRequest.SetSearchQuery(searchQuery)
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        rows := searchResponse.Rows
        requestCount := 1
        for searchResponse.NextToken != nil {           
            {  
	              // Jika Anda ingin menyimpan NextToken atau mentransfer NextToken ke halaman frontend, Anda dapat menggunakan Base64 untuk mengkodekan NextToken menjadi string. 
	              // Token bukanlah string. Jika Anda menggunakan string(NextToken) untuk mengkodekan token menjadi string, informasi tentang token hilang. 
	              tokenAsString := base64.StdEncoding.EncodeToString(searchResponse.NextToken)
	              // Dekode string menjadi byte. 
	              tokenAsByte, err := base64.StdEncoding.DecodeString(tokenAsString)
	              if err != nil {
		                fmt.Printf("len:%d, %#v",len(tokenAsByte), err)
		                return
	              }
            }
            searchQuery.SetToken(searchResponse.NextToken)
            searchResponse, err = client.Search(searchRequest)
            if err != nil {
                fmt.Printf("%#v", err)
                return
            }
            requestCount++
            for _, r := range searchResponse.Rows {
                rows = append(rows, r)
            }
        }
        fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess)
        fmt.Println("TotalCount: ", searchResponse.TotalCount)
        fmt.Println("RowsSize: ", len(rows))
        fmt.Println("RequestCount: ", requestCount)
    }
}