全部产品
Search
文档中心

Tablestore:Pengurutan dan Halaman

更新时间:Jul 02, 2025

Saat menggunakan indeks pencarian untuk menanyakan data, Anda dapat memanfaatkan metode pengurutan yang telah ditentukan sebelumnya atau menentukan metode pengurutan sendiri. Dengan cara ini, baris yang memenuhi kondisi kueri 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 Penggunaan

Kategori

Metode

Fitur

Skenario

Pengurutan

Tentukan metode pengurutan saat membuat indeks pencarian

Pra-pengurutan Indeks

Secara default, data dalam indeks pencarian diurutkan berdasarkan pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort. Pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort menentukan urutan default di mana baris yang memenuhi kondisi kueri dikembalikan.

Tentukan metode pengurutan saat menanyakan data

ScoreSort

Anda dapat menggunakan ScoreSort untuk mengurutkan hasil kueri berdasarkan skor relevansi kata kunci berbasis BM25. ScoreSort cocok untuk skenario seperti pencarian teks lengkap.

PrimaryKeySort

Anda dapat menggunakan PrimaryKeySort untuk mengurutkan hasil kueri berdasarkan nilai kunci utama. PrimaryKeySort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan pengenal unik dari data tersebut.

FieldSort

Anda dapat menggunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai satu atau lebih kolom. FieldSort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan properti seperti volume penjualan atau tayangan halaman. Dalam kebanyakan kasus, FieldSort digunakan di industri seperti e-commerce dan jejaring sosial serta aset media.

GeoDistanceSort

Anda dapat menggunakan GeoDistanceSort untuk mengurutkan hasil kueri berdasarkan lokasi geografis. GeoDistanceSort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan jarak dari lokasi tertentu. Dalam kebanyakan kasus, GeoDistanceSort digunakan di industri seperti pemetaan dan logistik. Misalnya, Anda dapat mengurutkan restoran di sekitar lokasi berdasarkan jarak dari lokasi tersebut.

Halaman

Tentukan metode halaman saat menanyakan data

Halaman berdasarkan parameter limit dan offset

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

Halaman berdasarkan token

Jika Anda menggunakan fitur ini, data dikembalikan halaman demi halaman dan Anda hanya bisa maju ke halaman sebelumnya. Jika Anda ingin maju ke halaman berikutnya, Anda dapat menyimpan dan menggunakan token sebelumnya karena token tetap valid selama kueri.

Pra-pengurutan Indeks

Secara default, data dalam indeks pencarian diurutkan berdasarkan pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort. Saat menggunakan indeks pencarian untuk menanyakan data, pengaturan pra-pengurutan dari parameter IndexSort menentukan urutan default untuk data yang cocok.

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

Penting
  • Anda dapat menentukan PrimaryKeySort atau FieldSort sebagai metode pra-pengurutan untuk indeks pencarian. PrimaryKeySort mengurutkan data berdasarkan nilai kunci utama, sedangkan FieldSort mengurutkan data berdasarkan nilai bidang.

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

  • Jika ingin memodifikasi pengaturan parameter IndexSort untuk indeks pencarian yang ada, Anda dapat memodifikasi skema indeks pencarian secara dinamis. Untuk informasi lebih lanjut, lihat Memodifikasi skema indeks pencarian secara dinamis.

Tentukan metode pengurutan saat menanyakan data

Pengurutan hanya dapat diaktifkan untuk bidang yang memiliki enable_sort_and_agg disetel ke True.

Anda dapat menentukan metode pengurutan untuk setiap kueri. Kueri berbasis indeks pencarian mendukung beberapa metode pengurutan, dan Anda juga dapat menentukan beberapa metode pengurutan berdasarkan prioritas yang berbeda.

ScoreSort

Gunakan ScoreSort untuk mengurutkan hasil kueri berdasarkan skor relevansi kata kunci berbasis BM25. ScoreSort cocok untuk skenario seperti pencarian teks lengkap.

Penting

Anda harus mengonfigurasi parameter untuk ScoreSort agar mengurutkan data yang cocok berdasarkan skor relevansi kata kunci. Jika tidak, data yang cocok akan diurutkan berdasarkan pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort.

sort = Sort(
    sorters=[ScoreSort(sort_order=SortOrder.DESC)]
)
client.search(
    '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)

PrimaryKeySort

Gunakan PrimaryKeySort untuk mengurutkan hasil kueri berdasarkan nilai kunci utama.

sort = Sort(
    sorters=[PrimaryKeySort(sort_order=SortOrder.DESC)]
)
client.search(
    '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
) = PrimaryKeySort(sort_order=SortOrder.DESC)

FieldSort

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

Urutkan hasil kueri berdasarkan nilai satu kolom

Gunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai kolom yang ditentukan.

sort = Sort(
    sorters=[FieldSort('a', SortOrder.ASC)]
)

client.search(
    '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)

Urutkan hasil kueri berdasarkan nilai beberapa kolom

Anda juga dapat mengurutkan hasil kueri berdasarkan nilai dua kolom dalam urutan tertentu untuk menentukan urutan pengembalian data yang cocok.

sort = Sort(
    sorters=[
        FieldSort('a', SortOrder.ASC),
        FieldSort('b', SortOrder.ASC)
    ]
)

client.search(
    '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)

GeoDistanceSort

Gunakan GeoDistanceSort untuk mengurutkan hasil kueri berdasarkan lokasi geografis.

sort = Sort(
    sorters=[GeoDistanceSort('g', ['32.5,116.5', '32.0,116.0'], sort_order=SortOrder.DESC, sort_mode=SortMode.MAX)]
)

client.search(
    '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)    

Tentukan metode halaman

Anda dapat menggunakan limit dan offset atau menggunakan token untuk membagi hasil kueri menjadi halaman-halaman.

Konfigurasikan parameter limit dan offset

Jika jumlah total baris dalam respons kurang dari 100.000, Anda dapat mengonfigurasi parameter limit dan offset untuk membagi baris-baris tersebut menjadi halaman. Jumlah dari nilai parameter limit dan offset tidak boleh melebihi 100.000. Nilai maksimum parameter limit adalah 100.

Jika Anda tidak menentukan nilai untuk parameter limit dan offset, nilai default akan digunakan. Nilai default untuk parameter limit adalah 10. Nilai default untuk parameter offset adalah 0.

query = RangeQuery('k', 'key100', 'key500', include_lower=False, include_upper=False)
search_response = client.search(
    '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', 
    SearchQuery(query, offset=100, limit=100, get_total_count=True), 
    ColumnsToGet(return_type=ColumnReturnType.ALL)
)  
print('request_id : %s' % search_response.request_id)
print('is_all_succeed : %s' % search_response.is_all_succeed)
print('total_count : %s' % search_response.total_count)
print('rows : %s' % search_response.rows)

Gunakan token

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

Jika Tablestore tidak dapat membaca semua data yang memenuhi kondisi kueri, Tablestore mengembalikan next_token. Anda dapat menggunakan next_token untuk melanjutkan pembacaan data berikutnya.

Secara default, Anda hanya bisa mundur ke halaman sebelumnya saat menggunakan token. Jika ingin maju ke halaman berikutnya, Anda dapat menyimpan dan menggunakan token sebelumnya karena token valid selama kueri.

Saat menggunakan token, metode pengurutan sama dengan metode yang digunakan dalam permintaan sebelumnya. Tablestore mengurutkan data berdasarkan bidang 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, yang dapat mengakibatkan kueri lambat.

Penting

Indeks pencarian yang berisi bidang bertipe Nested tidak mendukung IndexSort. Jika Anda memerlukan halaman dan menggunakan indeks pencarian yang berisi bidang bertipe Nested untuk menanyakan data, Anda harus menentukan metode pengurutan dalam kondisi kueri untuk mengembalikan data dalam urutan yang ditentukan. Jika tidak, Tablestore tidak mengembalikan next_token ketika hanya sebagian data yang memenuhi kondisi kueri dikembalikan.

query = MatchAllQuery()
all_rows = []
next_token = None
# putaran pertama
search_response = client.search('<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
        SearchQuery(query, next_token=next_token, limit=100, get_total_count=True),
        columns_to_get=ColumnsToGet(['k', 't', 'g', 'ka', 'la'], ColumnReturnType.SPECIFIED))
all_rows.extend(search_response.rows)
# loop
while search_response.next_token:
    search_response = client.search('<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
        SearchQuery(query, next_token=search_response.next_token, sort=None, limit=100, get_total_count=True),
        columns_to_get=ColumnsToGet(['k', 't', 'g', 'ka', 'la'], ColumnReturnType.SPECIFIED))
    all_rows.extend(search_response.rows)

print('Total rows:%d' % len(all_rows))

FAQ

Referensi

  • Saat menggunakan indeks pencarian untuk menanyakan data, Anda dapat menggunakan metode kueri berikut: kueri tepat, kueri terms, kueri match all, kueri match, kueri match phrase, kueri prefix, kueri range, kueri wildcard, kueri geo, kueri Boolean, kueri vektor KNN, kueri nested, dan kueri exists. Anda dapat menggunakan metode kueri yang disediakan oleh indeks pencarian untuk menanyakan data dari berbagai dimensi berdasarkan kebutuhan bisnis Anda.

    Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur pengurutan dan halaman. Untuk informasi lebih lanjut, lihat Pengurutan dan Halaman.

    Anda dapat menggunakan fitur collapse (distinct) untuk meruntuhkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari jenis yang ditentukan muncul hanya sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).

  • Jika ingin menganalisis data dalam tabel data, Anda dapat menggunakan fitur agregasi operasi Pencarian atau menjalankan pernyataan SQL. Misalnya, Anda dapat memperoleh nilai minimum dan maksimum, jumlah, dan jumlah total baris. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.

  • Jika ingin memperoleh semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Pemindaian Paralel.