全部产品
Search
文档中心

Tablestore:Pengurutan dan Halaman

更新时间:Jul 02, 2025

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

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 yang ditentukan oleh parameter IndexSort. Pengaturan ini menentukan urutan default hasil kueri.

Tentukan metode pengurutan saat mengkueri data

Pengurutan berdasarkan skor relevansi kata kunci berbasis BM25 (ScoreSort)

Gunakan ScoreSort untuk mengurutkan hasil kueri berdasarkan skor relevansi kata kunci berbasis BM25. Metode ini cocok untuk pencarian teks penuh.

Pengurutan berdasarkan nilai kunci utama (PrimaryKeySort)

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

Pengurutan berdasarkan nilai satu atau lebih kolom (FieldSort)

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

Pengurutan berdasarkan lokasi geografis (GeoDistanceSort)

Gunakan GeoDistanceSort untuk mengurutkan hasil kueri berdasarkan jarak dari lokasi tertentu. Cocok untuk pemetaan dan logistik.

Halaman

Tentukan metode halaman saat mengkueri data

Halaman berdasarkan parameter limit dan offset

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

Halaman berdasarkan token

Data dikembalikan halaman demi halaman. Anda hanya bisa mundur, namun token sebelumnya dapat disimpan untuk maju.

Pengurutan pra-indeks

Secara default, data dalam indeks pencarian diurutkan berdasarkan pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort. Saat menggunakan indeks pencarian untuk mengkueri data, pengaturan ini menentukan urutan default hasil kueri.

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

Penting
  • 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 pengurutan pra-indeks.

  • Untuk memodifikasi pengaturan parameter IndexSort pada indeks pencarian yang ada, Anda dapat memodifikasi skema indeks pencarian secara dinamis. Lihat Modifikasi skema indeks pencarian secara dinamis.

Tentukan metode pengurutan saat mengkueri data

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

Anda dapat menentukan metode pengurutan untuk setiap kueri. Kueri berbasis indeks pencarian mendukung beberapa metode pengurutan yang dapat digunakan berdasarkan prioritas.

ScoreSort

Gunakan ScoreSort untuk mengurutkan hasil kueri berdasarkan skor relevansi kata kunci berbasis BM25. Cocok untuk pencarian teks penuh.

Penting
  • Sebelum menggunakan ScoreSort, konfigurasikan parameternya. Jika tidak, hasil kueri akan diurutkan berdasarkan pengaturan pra-pengurutan IndexSort.

  • Saat menggunakan ScoreSort, bidang tipe FuzzyKeyword tidak digunakan untuk pengurutan dan pengaturan bobot tidak berlaku.

sort: {
    sorters: [
        {
            scoreSort: {
                order: TableStore.SortOrder.SORT_ORDER_ASC
            }
        }
    ]
}

PrimaryKeySort

Gunakan PrimaryKeySort untuk mengurutkan hasil kueri berdasarkan nilai kunci utama.

sort: {
    sorters: [
        {
            primaryKeySort: {
                order: TableStore.SortOrder.SORT_ORDER_DESC // Urutkan hasil kueri secara menurun. 
                //order: TableStore.SortOrder.SORT_ORDER_ASC // Urutkan hasil kueri secara naik. 
            }
        }
    ]
}

FieldSort

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

Urutkan hasil kueri berdasarkan nilai kolom tunggal

Gunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai kolom tertentu.

sort: {
    sorters: [
        {
            fieldSort: {
                fieldName: "Col_Keyword",
                order: TableStore.SortOrder.SORT_ORDER_DESC
            }
        }
    ]
}

Urutkan hasil kueri berdasarkan nilai beberapa kolom

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

sort: {
    sorters: [
        {
            fieldSort: {
                fieldName: "Col_Keyword",
                order: TableStore.SortOrder.SORT_ORDER_DESC
            }
        },
        {
            fieldSort: {
                fieldName: "Col_Long",
                order: TableStore.SortOrder.SORT_ORDER_DESC
            }
        }
    ]
}

GeoDistanceSort

Gunakan GeoDistanceSort untuk mengurutkan hasil kueri berdasarkan lokasi geografis.

sort: {
    sorters: [
        {
            geoDistanceSort: {
                fieldName: "Col_Geo_Point",
                points: ["0,0"],// Tentukan pasangan koordinat titik pusat. 
                order: TableStore.SortOrder.SORT_ORDER_ASC // Hasil kueri dikembalikan dalam urutan naik berdasarkan jarak antara lokasi geografis dan titik pusat. 
            }
        }
    ]
}

Untuk contoh kode terperinci, lihat Search.

Tentukan metode halaman

Anda dapat mengonfigurasi parameter limit dan offset atau menggunakan token untuk membagi halaman baris dalam respons.

Konfigurasikan parameter limit dan offset

Jika jumlah total baris dalam respons kurang dari 100.000, Anda dapat mengonfigurasi parameter limit dan offset untuk membagi halaman baris. Jumlah 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 digunakan. Nilai default parameter limit adalah 10, sedangkan nilai default parameter offset adalah 0.

/**
 * Set offset ke 90 dan limit ke 10 untuk memindai data dari baris 90 hingga baris 99. 
 */
client.search({
    tableName: TABLE_NAME,
    indexName: INDEX_NAME,
    searchQuery: {
        offset: 90,
        limit: 10, 
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY
        },
        getTotalCount: true // Tentukan apakah akan mengembalikan jumlah total baris yang memenuhi kondisi kueri. Nilai default: false. 
    },
    columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat menyetel parameter columnToGet ke RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, atau RETURN_NONE untuk mengembalikan hanya kolom kunci utama. 
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

Gunakan token

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

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

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

Penting

Jika Anda ingin menyimpan NextToken atau mentransfer NextToken ke halaman frontend, gunakan Base64 untuk mengkodekan NextToken menjadi string. Token bukanlah string. Jika Anda 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 kueri lambat.

Penting

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

/**
 * Gunakan token untuk membagi halaman baris dalam respons dalam mode sinkron dan asinkron. 
 */
var params = {
    tableName: TABLE_NAME,
    indexName: INDEX_NAME,
    searchQuery: {
        offset: 0,
        limit: 10,
        token: null,// Peroleh nextToken sebagai titik awal untuk memindai halaman berikutnya. Tipe data adalah aliran byte. 
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY
        },
        getTotalCount: true
    },
    columnToGet: {
        returnType: TableStore.ColumnReturnType.RETURN_SPECIFIED,
        returnNames: ["pic_tag", "pic_description", "time_stemp", "pos"]
    }
};

/**
 * Gunakan token untuk membagi halaman baris dalam respons dalam mode sinkron. 
 */
(async () => { // Bagi halaman baris dalam mode sinkron. 
  try {
    var data = await client.search(params);
    console.log('success:', JSON.stringify(data, null, 2));

    while (data.nextToken && data.nextToken.length) { // Jika nextToken dikembalikan, Tablestore melanjutkan membaca data berikutnya. 

      // Simpan token. 
      //1) Konversikan token (nextToken) sebagai data biner dalam objek Buffer ke string yang dikodekan Base64 dan simpan string tersebut. 
      //2) Anda dapat mengonversi string Base64 yang disimpan ke data biner dengan membuat objek Buffer untuk menggunakan nextToken sebagai parameter. 
      var nextToken = data.nextToken.toString("base64");
      var token =  Buffer.from(nextToken, "base64");

      params.searchQuery.token = token;// Perbarui nilai token untuk mengembalikan lebih banyak hasil. 
      data = await client.search(params);
      console.log('token success:', JSON.stringify(data, null, 2));
    }
  } catch (error) {
      console.log(error);
  }
})()

/**
 * Gunakan token untuk membagi halaman baris dalam respons dalam mode asinkron. 
 */
client.search(params, function (err, data) { 
    console.log('success:', JSON.stringify(data, null, 2));

    if (data.nextToken && data.nextToken.length) {

        // Simpan token. 
        //1) Konversikan token (nextToken) sebagai data biner dalam objek Buffer ke string yang dikodekan Base64 dan simpan string tersebut. 
        //2) Anda dapat mengonversi string Base64 yang disimpan ke data biner dengan membuat objek Buffer untuk menggunakan nextToken sebagai parameter. 
        var nextToken = data.nextToken.toString("base64");
        var token =  Buffer.from(nextToken, "base64");

        params.searchQuery.token = token;// Perbarui nilai token untuk mengembalikan lebih banyak hasil. 
        client.search(params, function (err, data) {
            console.log('token success:', JSON.stringify(data, null, 2));
        });
    }
});