Gunakan Tablestore SDK untuk Go guna mengurutkan hasil berdasarkan nilai bidang, skor relevansi, kunci primer, atau jarak geografis, serta melakukan paginasi menggunakan token.
Prasyarat
Instal Tablestore Go SDK dan inisialisasi client.
Deskripsi
Anda dapat mengonfigurasi satu atau beberapa sorter. Hasil dibandingkan sesuai urutan daftar sorter tersebut. Jika tidak ada sorter yang dikonfigurasi, sistem akan menggunakan IndexSort yang ditetapkan saat pembuatan indeks pencarian. Apabila IndexSort tidak dikonfigurasi, pengurutan berdasarkan kunci primer digunakan secara default. IndexSort hanya mendukung PrimaryKeySort dan FieldSort. Setelah indeks dibuat, Anda dapat mengubah IndexSort melalui modifikasi skema secara dinamis. ScoreSort mengurutkan berdasarkan skor relevansi BM25 dan hanya berlaku jika dikonfigurasi secara eksplisit.
Saat sorter non-primary-key ditentukan, server secara default menambahkan sorter kunci primer agar baris dengan nilai sort yang sama memiliki urutan deterministik. Nilai default DisableDefaultPkSorter adalah false. Jangan nonaktifkan perilaku ini untuk paginasi berbasis token. Jika nilai sort diduplikasi dan pengurutan kunci primer dinonaktifkan, beberapa baris mungkin terlewat.
Indeks pencarian yang berisi bidang Nested tidak mendukung IndexSort. Untuk melakukan paginasi kueri pada indeks semacam ini, konfigurasikan pengurutan secara eksplisit dalam permintaan kueri. Jika tidak, server tidak akan mengembalikan NextToken meskipun masih terdapat data tambahan.
Saat menggunakan ScoreSort, bidang FuzzyKeyword tidak ikut dalam pengurutan, dan Weight tidak memengaruhi bidang 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)
}
Parameter
Konfigurasi pengurutan
|
Name |
Type |
Description |
|
Sorters (required) |
[]search.Sorter |
Sorter yang digunakan. FieldSort, ScoreSort, PrimaryKeySort, dan GeoDistanceSort didukung dan diterapkan sesuai urutan dalam daftar. DocSort hanya dapat dikonfigurasi secara eksplisit dalam NestedQuery.InnerHits dan tidak dapat digunakan sebagai sorter tingkat atas pada Search. |
|
DisableDefaultPkSorter (optional) |
*bool |
Menentukan apakah akan menonaktifkan sorter kunci primer yang ditambahkan oleh server. Nilai default: false. Parameter ini didukung oleh Tablestore SDK untuk Go versi 1.7.16 ke atas. |
Pengurutan berdasarkan nilai bidang
|
Name |
Type |
Description |
|
FieldName (required) |
string |
Bidang yang digunakan untuk pengurutan. Pengurutan dan agregasi harus diaktifkan untuk bidang tersebut. |
|
Order (optional) |
*search.SortOrder |
Urutan pengurutan. Nilai yang valid adalah search.SortOrder_ASC dan search.SortOrder_DESC. Nilai default: ascending. |
|
Mode (optional) |
*search.SortMode |
Metode pemilihan nilai untuk bidang multi-nilai. Nilai yang valid adalah search.SortMode_Min, search.SortMode_Max, dan search.SortMode_Avg. |
|
NestedFilter (optional) |
*search.NestedFilter |
Konfigurasi pengurutan untuk bidang turunan Nested. Tentukan parameter ini hanya saat Anda mengurutkan berdasarkan bidang turunan Nested. |
|
MissingValue (optional) |
interface{} |
Nilai pengurutan yang digunakan ketika semua bidang yang ditentukan oleh FieldName dan MissingFields tidak tersedia. search.FirstWhenMissing menempatkan nilai yang hilang di awal terlepas dari urutan pengurutan. search.LastWhenMissing atau nil menempatkannya di akhir. Anda juga dapat menentukan nilai kustom bertipe sama dengan bidang tersebut untuk pengurutan. |
|
MissingField (optional) |
*string |
Bidang pengurutan cadangan. Parameter ini sudah tidak digunakan lagi. Gunakan MissingFields. |
|
MissingFields (optional) |
[]string |
Bidang pengurutan cadangan. Jika bidang yang ditentukan oleh FieldName tidak tersedia, bidang pertama yang tersedia dalam urutan daftar digunakan untuk pengurutan. Anda dapat menentukan hingga tiga bidang. Semua bidang tersebut harus memiliki tipe yang sama dengan bidang yang ditentukan oleh FieldName, serta pengurutan dan agregasi harus diaktifkan untuk semua bidang. Parameter ini didukung oleh Tablestore SDK untuk Go versi 1.9.0 ke atas. |
Nested filter
|
Name |
Type |
Description |
|
Path (required) |
string |
Jalur bidang Nested. |
|
Filter (required) |
search.Query |
Kueri yang memfilter baris turunan Nested yang digunakan untuk pengurutan. Gunakan MatchAllQuery untuk menyertakan semua baris turunan. |
Pengurutan berdasarkan skor, kunci primer, dan urutan dokumen
|
Name |
Type |
Description |
|
ScoreSort.Order (optional) |
*search.SortOrder |
Urutan skor relevansi BM25. search.NewScoreSort() secara default mengurutkan skor dalam urutan menurun. |
|
PrimaryKeySort.Order (optional) |
*search.SortOrder |
Urutan kunci primer. search.NewPrimaryKeySort() secara default mengurutkan kunci primer dalam urutan naik. |
|
DocSort.SortOrder (optional) |
*search.SortOrder |
Urutan dokumen dalam NestedQuery.InnerHits. Nilai default: ascending. DocSort didukung oleh Tablestore SDK untuk Go versi 1.7.12 ke atas. |
Pengurutan berdasarkan jarak geografis
|
Name |
Type |
Description |
|
FieldName (required) |
string |
Nama bidang Geo-point. |
|
Points (required) |
[]string |
Titik target yang digunakan untuk menghitung jarak. Gunakan format |
|
Order (optional) |
*search.SortOrder |
Urutan pengurutan jarak. search.SortOrder_ASC mengurutkan dari terdekat ke terjauh, sedangkan search.SortOrder_DESC mengurutkan dari terjauh ke terdekat. |
|
Mode (optional) |
*search.SortMode |
Metode pemilihan nilai saat terdapat beberapa jarak. Nilai yang valid adalah search.SortMode_Min, search.SortMode_Max, dan search.SortMode_Avg. |
|
GeoDistanceType (optional) |
*search.GeoDistanceType |
Metode perhitungan jarak. search.GeoDistanceType_ARC menghitung jarak pada bola dan memberikan akurasi lebih tinggi. search.GeoDistanceType_PLANE menghitung jarak pada bidang datar dan menggunakan lebih sedikit sumber daya. Nilai default: ARC. |
|
NestedFilter (optional) |
*search.NestedFilter |
Jalur dan filter yang digunakan untuk mengurutkan bidang turunan Nested. |
Konfigurasi paginasi
|
Name |
Type |
Description |
|
Limit (optional) |
int32 |
Jumlah maksimum baris per halaman. Nilai default: 10. Batas maksimum biasanya 100. Jika semua kolom yang dikembalikan disimpan dalam indeks pencarian, batas maksimum dapat ditingkatkan hingga 1.000. Untuk informasi selengkapnya, lihat Bagaimana cara meningkatkan batas kueri indeks pencarian menjadi 1.000?. Untuk paginasi berbasis offset, Offset + Limit tidak boleh melebihi 100.000. |
|
Offset (optional) |
int32 |
Posisi awal. Nilai default: 0. Gunakan parameter ini untuk paginasi dangkal dalam rentang 100.000 baris. |
|
Token (optional) |
[]byte |
Nilai NextToken dari respons sebelumnya. Gunakan parameter ini untuk paginasi dalam berturut-turut. SetToken menghapus Sort karena token berisi kondisi pengurutan halaman sebelumnya. Jangan tentukan Offset untuk paginasi berbasis token. Encode token biner dalam Base64 untuk persistensi atau transmisi melalui protokol teks atau lintas proses. |
Paginasi berbasis token secara default hanya bergerak maju. Untuk kembali ke halaman sebelumnya, simpan dan gunakan kembali token sebelumnya. Paginasi berbasis token tidak terikat oleh batas kedalaman 100.000 baris.
Respons
|
Name |
Type |
Description |
|
Rows |
[]*tablestore.Row |
Baris yang dikembalikan oleh kueri saat ini. Jumlahnya tidak melebihi Limit. |
|
SearchHits |
[]*tablestore.SearchHit |
Hasil pencarian. Baca bidang ini saat Anda menggunakan skor relevansi, penyorotan, atau Nested InnerHits. |
|
TotalCount |
int64 |
Jumlah total baris yang cocok. Nilainya bergantung pada SetGetTotalCount dan bukan jumlah baris pada halaman saat ini. |
|
NextToken |
[]byte |
Token untuk halaman berikutnya. Nilai kosong menunjukkan bahwa tidak ada data tambahan atau kueri saat ini tidak memiliki urutan pengurutan deterministik. |
|
IsAllSuccess |
bool |
Menunjukkan apakah semua partisi indeks telah dikueri. Jika nilainya false, hasil parsial dikembalikan. |