All Products
Search
Document Center

Tablestore:Sorting dan paging

Last Updated:Oct 09, 2026

Saat menggunakan search index untuk mengkueri data, Anda dapat memilih metode sorting bawaan atau menentukan metode sorting sendiri. Dengan demikian, baris-baris yang memenuhi kondisi kueri akan dikembalikan sesuai urutan yang telah ditentukan sebelumnya atau yang Anda spesifikasikan. Jika jumlah baris dalam respons sangat besar, Anda dapat menemukan data yang diperlukan dengan mengonfigurasi parameter limit dan offset atau menggunakan token.

Skenario

Category

Method

Feature

Scenario

Sorting

Tentukan metode sorting saat membuat search index

Index presorting (IndexSort)

Secara default, data dalam search index diurutkan berdasarkan pengaturan presorting yang ditentukan oleh parameter IndexSort. Pengaturan ini menentukan urutan default pengembalian baris-baris yang memenuhi kondisi kueri.

Tentukan metode sorting saat mengkueri data

Sorting berdasarkan skor relevansi kata kunci berbasis BM25 (ScoreSort)

Anda dapat menggunakan ScoreSort untuk mengurutkan hasil kueri berdasarkan skor relevansi kata kunci berbasis BM25. ScoreSort cocok untuk skenario seperti pencarian teks lengkap (full-text search).

Sorting berdasarkan nilai primary key (PrimaryKeySort)

Anda dapat menggunakan PrimaryKeySort untuk mengurutkan hasil kueri berdasarkan nilai primary key. PrimaryKeySort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan pengenal uniknya.

Sorting berdasarkan nilai satu atau beberapa kolom (FieldSort)

Anda dapat menggunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai satu atau beberapa kolom. FieldSort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan properti seperti volume penjualan atau jumlah tampilan halaman. Umumnya, FieldSort digunakan di industri seperti e-commerce, jejaring sosial, dan aset media.

Sorting berdasarkan lokasi geografis (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. Umumnya, GeoDistanceSort digunakan di industri seperti pemetaan dan logistik. Misalnya, Anda dapat mengurutkan restoran di sekitar suatu lokasi berdasarkan jarak dari lokasi tersebut.

Paging

Tentukan metode paging saat mengkueri data

Paging berdasarkan parameter limit dan offset

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

Paging berdasarkan token

Jika menggunakan fitur ini, data dikembalikan per halaman dan Anda hanya dapat melakukan paging mundur. Untuk paging maju, Anda dapat menyimpan cache token sebelumnya karena token tetap valid selama proses kueri.

Index presorting

Secara default, Tablestore mengurutkan data dalam search index berdasarkan urutan sortir yang telah ditentukan sebelumnya, yang disebut index presorting (IndexSort). Saat Anda mengkueri data, IndexSort menentukan urutan default hasil yang dikembalikan.

Saat membuat indeks pencarian, Anda dapat mengkustomisasi IndexSort. Jika pengaturan ini tidak ditentukan, indeks akan menggunakan pengurutan berdasarkan kunci utama secara default.

Penting
  • Index presorting hanya mendukung PrimaryKeySort (primary key sort) dan FieldSort (field sort).

  • Anda tidak dapat menggunakan index presorting untuk search index yang berisi bidang bertipe nested.

  • Setelah membuat search index, fitur dynamic schema modification memungkinkan Anda memodifikasi pengaturan IndexSort.

Tentukan metode sorting saat mengkueri data

Sorting hanya dapat dilakukan untuk bidang yang parameter enable_sort_and_agg-nya diatur ke true.

Anda dapat menentukan metode sorting untuk setiap kueri. Search index mendukung empat jenis sorter berikut. Anda juga dapat menggunakan beberapa sorter untuk mengurutkan hasil berdasarkan urutan kriteria tertentu.

ScoreSort

ScoreSort

Mengurutkan hasil kueri berdasarkan skor relevansi, yang dihitung menggunakan algoritma BM25. Metode ini cocok untuk skenario berbasis relevansi, seperti pencarian teks lengkap.

Penting
  • Jika ingin mengurutkan berdasarkan skor relevansi, Anda harus secara eksplisit menentukan ScoreSort. Jika tidak, Tablestore akan mengurutkan hasil sesuai pengaturan IndexSort pada indeks.

  • Saat menggunakan ScoreSort, bidang bertipe FuzzyKeyword tidak termasuk dalam proses sorting, dan parameter weight tidak berpengaruh pada bidang-bidang tersebut.

'sort' => array(
    array(
        'score_sort' => array(
            'order' => SortOrderConst::SORT_ORDER_DESC
        )
    ),
)

PrimaryKeySort

Mengurutkan hasil berdasarkan primary key.

'sort' => array(
    array(
        'pk_sort' => array(
            'order' => SortOrderConst::SORT_ORDER_ASC
        )
    ),
)

FieldSort

Anda dapat menggunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai satu atau beberapa kolom tertentu.

'sort' => array(
    array(
        'field_sort' => array(
            'field_name' => 'keyword',
            'order' => SortOrderConst::SORT_ORDER_ASC,
            'mode' => SortModeConst::SORT_MODE_AVG,
        )
    ),
)

GeoDistanceSort

Mengurutkan hasil berdasarkan jarak dari titik geografis.

'sort' => array(
    array(
        'geo_distance_sort' => array(
            'field_name' => 'geo',
            'order' => SortOrderConst::SORT_ORDER_ASC,
            'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE,
            'points' => array('0.6,0.6')
        )
    ),
)

Kombinasi beberapa metode sorting

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

'sort' => array(
    array(
        'field_sort' => array(
            'field_name' => 'keyword',
            'order' => SortOrderConst::SORT_ORDER_ASC,
            'mode' => SortModeConst::SORT_MODE_AVG,
        )
    ),
    array(
        'pk_sort' => array(
            'order' => SortOrderConst::SORT_ORDER_ASC
        )
    ),
)

Tentukan metode paging

Untuk melakukan paging pada hasil kueri, Anda dapat menggunakan parameter limit dan offset atau token.

Konfigurasi parameter limit dan offset

Offset-based paging

Anda dapat menggunakan offset-based paging ketika jumlah total baris yang akan diambil kurang dari 100.000. Jumlah limit dan offset harus kurang dari atau sama dengan 100.000, dan nilai maksimum untuk limit adalah 100.

Catatan

Untuk meningkatkan ambang batas limit, lihat Bagaimana cara meningkatkan limit API Search menjadi 1.000?.

Jika Anda tidak mengatur parameter limit dan offset, nilai default limit adalah 10 dan offset adalah 0.

$request = array(
    'table_name' => 'php_sdk_test',
    'index_name' => 'php_sdk_test_search_index',
    'search_query' => array(
        'offset' => 10,
        'limit' => 10,
        'get_total_count' => true,
        'query' => array(
            'query_type' => QueryTypeConst::MATCH_ALL_QUERY
        ),
        'sort' => array(
            array(
                'field_sort' => array(
                    'field_name' => 'keyword',
                    'order' => SortOrderConst::SORT_ORDER_ASC
                )
            ),
        ),
        'token' => null,
    ),
    'columns_to_get' => array(
        'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
        'return_names' => array('col1', 'col2')
    )
);
$response = $otsClient->search($request);

Gunakan token

Paging berbasis token direkomendasikan untuk deep paging karena tidak memiliki batas kedalaman.

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

Secara default, paging berbasis token hanya memungkinkan Anda bergerak maju melalui hasil. Namun, karena token tetap valid selama proses kueri, Anda dapat menyimpan cache token sebelumnya untuk melakukan paging mundur.

Saat melakukan paging dengan token, urutan sortir sama dengan permintaan sebelumnya, baik menggunakan IndexSort default maupun sortir kustom. Oleh karena itu, Anda tidak dapat mengatur parameter Sort saat menggunakan token. Anda juga tidak dapat mengatur offset, karena data hanya dapat dibaca secara berurutan.

Penting Search index yang berisi bidang bertipe Nested tidak mendukung IndexSort. Jika Anda memerlukan paging dan menggunakan search index yang berisi bidang bertipe Nested untuk mengkueri data, Anda harus menentukan metode sorting dalam kondisi kueri agar data dikembalikan dalam urutan yang ditentukan. Jika tidak, Tablestore tidak akan mengembalikan next_token ketika hanya sebagian data yang memenuhi kondisi kueri berhasil dikembalikan.
$request = array(
    'table_name' => 'php_sdk_test',
    'index_name' => 'php_sdk_test_search_index',
    'search_query' => array(
        'offset' => 0,
        'limit' => 10,
        'get_total_count' => true,
        'query' => array(
            'query_type' => QueryTypeConst::FUNCTION_SCORE_QUERY,
            'query' => array(
                'query' => array(
                    'query_type' => QueryTypeConst::TERM_QUERY,
                    'query' => array(
                        'field_name' => 'keyword',
                        'term' => 'keyword'
                    )
                ),
                'field_value_factor' => array(
                    'field_name' => 'long'
                )
            )
        ),
        'sort' => array(
            array(
                'score_sort' => array(
                    'order' => SortOrderConst::SORT_ORDER_DESC
                )
            ),
        )
    ),
    'columns_to_get' => array(
        'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
        'return_names' => array('keyword', 'long')
    )
);

$response = $otsClient->search($request);
print "total_hits: " . $response['total_hits'] . "\n";
print json_encode($response['rows'], JSON_PRETTY_PRINT);

while($response['next_token'] != null) {
    $request['search_query']['token'] = $response['next_token'];
    $request['search_query']['sort'] = null;// Jika next_token disertakan dalam respons, Anda tidak dapat menentukan metode sorting karena token sudah mencakup informasi sorting tersebut. 
    $response = $otsClient->search($request);
    print json_encode($response['rows'], JSON_PRETTY_PRINT);
}

FAQ

Referensi

  • Saat menggunakan search index untuk mengkueri data, Anda dapat menggunakan metode kueri berikut: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, Boolean query, geo query, nested query, dan exists query. Anda dapat menggunakan berbagai metode kueri untuk mengkueri data dari berbagai dimensi sesuai kebutuhan bisnis Anda.

    Jika ingin mengurutkan atau melakukan paging pada baris-baris yang memenuhi kondisi kueri, Anda dapat menggunakan fitur sorting dan paging. Untuk informasi lebih lanjut, lihat Sorting dan paging.

    Jika ingin menciutkan (collapse) set hasil berdasarkan kolom tertentu, Anda dapat menggunakan fitur collapse (distinct). Dengan cara ini, data jenis tertentu hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).

  • Jika ingin menganalisis data dalam tabel data, seperti mendapatkan nilai ekstrem, jumlah total, dan jumlah baris, Anda dapat melakukan operasi agregasi atau mengeksekusi pernyataan SQL. Untuk informasi lebih lanjut, lihat Agregasi dan SQL query.

  • Jika ingin dengan cepat mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkannya, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Parallel scan.