全部产品
Search
文档中心

Tablestore:Aggregasi

更新时间:Jul 06, 2025

Anda dapat melakukan operasi agregasi untuk mendapatkan nilai minimum, maksimum, jumlah, rata-rata, jumlah baris, dan jumlah unik baris. Operasi ini juga memungkinkan pengelompokan hasil berdasarkan nilai bidang, rentang, lokasi geografis, atau filter, serta mendukung kueri bersarang untuk kebutuhan yang lebih kompleks.

Prosedur

Gambar berikut mengilustrasikan prosedur lengkap untuk melakukan agregasi.

fig_agg_pro

Server memeriksa data yang sesuai dengan kondisi kueri dan menjalankan agregasi sesuai permintaan. Permintaan yang melibatkan agregasi umumnya lebih kompleks untuk diproses dibandingkan dengan permintaan tanpa agregasi.

Informasi latar belakang

Tabel berikut menjelaskan metode-metode agregasi yang tersedia.

Metode

Deskripsi

Nilai minimum

Metode agregasi yang dapat digunakan untuk mengembalikan nilai minimum dari suatu bidang. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi MIN SQL.

Nilai maksimum

Metode agregasi yang dapat digunakan untuk mengembalikan nilai maksimum dari suatu bidang. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi MAX SQL.

Jumlah

Metode agregasi yang dapat digunakan untuk mengembalikan jumlah semua nilai untuk bidang numerik. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi SUM SQL.

Nilai rata-rata

Metode agregasi yang dapat digunakan untuk mengembalikan rata-rata semua nilai untuk bidang numerik. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi AVG SQL.

Jumlah

Metode agregasi yang dapat digunakan untuk mengembalikan jumlah total nilai untuk bidang tertentu atau jumlah total baris dalam indeks pencarian. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi COUNT SQL.

Jumlah unik

Metode agregasi yang dapat digunakan untuk mengembalikan jumlah nilai unik untuk suatu bidang. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi COUNT(DISTINCT) SQL.

Statistik persentil

Nilai persentil menunjukkan posisi relatif suatu nilai dalam dataset. Misalnya, ketika Anda mengumpulkan statistik tentang waktu respons setiap permintaan selama pemeliharaan rutin sistem Anda, Anda harus menganalisis distribusi waktu respons menggunakan persentil seperti p25, p50, p90, dan p99.

Pengelompokan berdasarkan nilai bidang

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan nilai bidang. Nilai yang sama dikelompokkan bersama. Nilai identik dari setiap kelompok dan jumlah nilai identik di setiap kelompok dikembalikan.

Catatan

Jumlah yang dihitung mungkin berbeda dari jumlah sebenarnya jika jumlah nilai dalam kelompok sangat besar.

Pengelompokan berdasarkan rentang

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan rentang nilai suatu bidang. Nilai bidang yang berada dalam rentang tertentu dikelompokkan bersama. Jumlah nilai dalam setiap rentang dikembalikan.

Pengelompokan berdasarkan lokasi geografis

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan jarak dari lokasi geografis ke titik pusat. Hasil kueri dalam jarak yang berada dalam rentang tertentu dikelompokkan bersama. Jumlah nilai dalam setiap rentang dikembalikan.

Pengelompokan berdasarkan filter

Metode agregasi yang dapat digunakan untuk menyaring hasil kueri dan mengelompokkannya bersama untuk mendapatkan jumlah hasil yang sesuai dengan setiap filter. Hasil dikembalikan dalam urutan filter yang ditentukan.

Kueri berdasarkan histogram

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan interval data tertentu. Nilai bidang yang berada dalam rentang yang sama dikelompokkan bersama. Rentang nilai setiap kelompok dan jumlah nilai dalam setiap kelompok dikembalikan.

Kueri baris yang diperoleh dari hasil operasi agregasi di setiap kelompok

Setelah Anda mengelompokkan hasil kueri, Anda dapat menanyakan baris dalam setiap kelompok. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi ANY_VALUE(field) di MySQL.

Prasyarat

Nilai Minimum

Metode agregasi ini digunakan untuk mengembalikan nilai minimum dari suatu bidang dan bekerja mirip dengan fungsi MIN SQL.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, dan DATE yang didukung.

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

    • Jika Anda tidak menentukan nilai untuk missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "min_test",
                    type: TableStore.AggregationType.AGG_MIN,
                    body: {
                        fieldName: "col_long",
                        missing: 333,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Nilai Maksimum

Metode agregasi ini digunakan untuk mengembalikan nilai maksimum dari suatu bidang dan bekerja mirip dengan fungsi MAX SQL.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, dan DATE yang didukung.

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

    • Jika Anda tidak menentukan nilai untuk missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "max_test",
                    type: TableStore.AggregationType.AGG_MAX,
                    body: {
                        fieldName: "col_long",
                        missing: 333,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Jumlah

Metode agregasi ini digunakan untuk menghitung total nilai dari bidang numerik dan bekerja mirip dengan fungsi SUM SQL.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe data LONG dan DOUBLE yang didukung.

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

    • Jika Anda tidak menentukan nilai untuk missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "sum_test",
                    type: TableStore.AggregationType.AGG_SUM,
                    body: {
                            fieldName: "col_long",
                            missing: 444,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Nilai Rata-rata

Metode agregasi ini digunakan untuk menghitung rata-rata nilai dari bidang numerik dan bekerja mirip dengan fungsi AVG SQL.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, dan DATE yang didukung.

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

    • Jika Anda tidak menentukan nilai untuk missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "avg_test",
                    type: TableStore.AggregationType.AGG_AVG,
                    body: {
                            fieldName: "col_long",
                            missing: 111,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Jumlah

Metode agregasi ini digunakan untuk menghitung jumlah total nilai pada bidang tertentu atau jumlah total baris dalam indeks pencarian, mirip dengan fungsi COUNT SQL.

Catatan

Berikut adalah cara untuk menanyakan jumlah total baris dalam indeks pencarian atau jumlah baris yang memenuhi kondisi kueri:

  • Gunakan fitur count dari agregasi dan tentukan count(*) dalam permintaan.

  • Gunakan fitur kueri untuk mendapatkan jumlah baris yang memenuhi kondisi kueri. Atur setGetTotalCount ke true dalam kueri. Gunakan MatchAllQuery untuk mendapatkan jumlah total baris dalam indeks pencarian.

Nama kolom dapat digunakan sebagai nilai ekspresi count untuk menanyakan jumlah baris yang berisi kolom dalam indeks pencarian. Metode ini cocok untuk skenario yang melibatkan kolom jarang.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT, dan DATE yang didukung.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "count_test",
                    type: TableStore.AggregationType.AGG_COUNT,
                    body: {
                            fieldName: "col_long",
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Jumlah Unik

Metode agregasi ini digunakan untuk menghitung jumlah nilai unik pada suatu bidang dan bekerja mirip dengan fungsi COUNT(DISTINCT) SQL.

Catatan

Jumlah nilai unik merupakan angka perkiraan.

  • Jika jumlah total baris sebelum menggunakan fitur distinct count kurang dari 10.000, hasil perhitungan mendekati nilai eksak.

  • Jika jumlah total baris sebelum menggunakan fitur distinct count lebih besar dari atau sama dengan 100 juta, tingkat kesalahan sekitar 2%.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT, dan DATE yang didukung.

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

    • Jika Anda tidak menentukan nilai untuk missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "AGG_DISTINCT_COUNT_test",
                    type: TableStore.AggregationType.AGG_DISTINCT_COUNT,
                    body: {
                            fieldName: "col_long",
                            missing: 666,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Statistik Persentil

Nilai persentil menunjukkan posisi relatif suatu nilai dalam dataset. Misalnya, saat menganalisis waktu respons selama pemeliharaan sistem, Anda dapat menggunakan persentil seperti p25, p50, p90, dan p99 untuk memahami distribusi waktu respons.

Catatan
  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, dan DATE yang didukung.

    percentiles

    Persentil seperti p50, p90, dan p99. Anda dapat menentukan satu atau lebih persentil.

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

    • Jika Anda tidak menentukan nilai untuk missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "AGG_PERCENTILES_test",
                    type: TableStore.AggregationType.AGG_PERCENTILES,
                    body: {
                            fieldName: "col_long",
                            percentiles: [20, 50, 90, 100],
                            missing: 888,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Pengelompokan Berdasarkan Nilai Bidang

Metode agregasi ini digunakan untuk mengelompokkan hasil kueri berdasarkan nilai bidang. Nilai identik dikelompokkan bersama, dan jumlah nilai dalam setiap kelompok dikembalikan.

Catatan

Jumlah yang dihitung mungkin berbeda dari jumlah sebenarnya jika jumlah nilai dalam kelompok sangat besar.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, BOOLEAN, KEYWORD, dan DATE yang didukung.

    sort

    Aturan pengurutan untuk kelompok. Secara default, kelompok diurutkan berdasarkan jumlah item dalam kelompok secara menurun. Jika Anda mengonfigurasi beberapa aturan pengurutan, kelompok diurutkan berdasarkan urutan konfigurasi aturan tersebut. Aturan pengurutan yang didukung:

    • Urutkan berdasarkan nilai secara alfabetis.

    • Urutkan berdasarkan nilai secara alfabetis terbalik.

    • Urutkan berdasarkan jumlah baris secara menaik.

    • Urutkan berdasarkan jumlah baris secara menurun.

    • Urutkan berdasarkan nilai yang diperoleh dari hasil sub-agregasi secara menaik.

    • Urutkan berdasarkan nilai yang diperoleh dari hasil sub-agregasi secara menurun.

    size

    Jumlah kelompok yang ingin Anda kembalikan. Nilai default: 10. Nilai maksimum: 2000. Jika jumlah kelompok melebihi 2.000, hanya 2.000 kelompok pertama yang dikembalikan.

    subAggs dan subGroupBys

    Operasi sub-agregasi. Anda dapat melakukan operasi sub-agregasi berdasarkan hasil pengelompokan.

    • Skenario

      Tanyakan jumlah produk dalam setiap kategori, serta harga produk maksimum dan minimum dalam setiap kategori.

    • Metode

      Kelompokkan hasil kueri berdasarkan kategori produk untuk mendapatkan jumlah produk dalam setiap kategori. Kemudian, lakukan dua operasi sub-agregasi untuk mendapatkan harga produk maksimum dan minimum dalam setiap kategori.

    • Contoh:

      • Buah-buahan: 5. Harga maksimum adalah CNY 15. Harga minimum adalah CNY 3.

      • Perlengkapan mandi: 10. Harga maksimum adalah CNY 98. Harga minimum adalah CNY 1.

      • Perangkat elektronik: 3. Harga maksimum adalah CNY 8.699. Harga minimum adalah CNY 2.300.

      • Produk lainnya: 15. Harga maksimum adalah CNY 1.000. Harga minimum adalah CNY 80.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                {
                    name: "group_by_GROUP_BY_FIELD",
                    type: TableStore.GroupByType.GROUP_BY_FIELD,
                    body: {
                        fieldName: "city",
                        size: 111,
                        sort: {
                            sorters: [
                                {
                                    groupKeySort: {
                                        order: TableStore.SortOrder.SORT_ORDER_ASC,
                                    },
                                },
                                {
                                    rowCountSort: {
                                        order: TableStore.SortOrder.SORT_ORDER_DESC,
                                    },
                                },
                            ],
                        },
                        subGroupBys: { // SubGroupBys bersarang.
                            groupBys: [
                                {
                                    name: "group_by_GROUP_BY_RANGE",
                                    type: TableStore.GroupByType.GROUP_BY_RANGE,
                                    body: {
                                        fieldName: "age",
                                        ranges: [
                                            {
                                                from: 4,
                                                to: 5,
                                            },
                                            {
                                                from: 6,
                                                to: 7,
                                            },
                                        ],
                                        subAggs: { // Sub-agregasi bersarang.
                                            aggs: [
                                                {
                                                    name: "AGG_COUNT_test",
                                                    type: TableStore.AggregationType.AGG_COUNT,
                                                    body: {
                                                        fieldName: "*",
                                                        missing: 8,
                                                    },
                                                },
                                            ],
                                        },
                                    },
                                },
                            ],
                        },
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Pengelompokan Berdasarkan Rentang

Metode agregasi ini digunakan untuk mengelompokkan hasil kueri berdasarkan rentang nilai suatu bidang. Nilai dalam rentang tertentu dikelompokkan bersama, dan jumlah nilai dalam setiap rentang dikembalikan.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG dan DOUBLE yang didukung.

    ranges[from, to)

    Rentang nilai yang digunakan untuk pengelompokan.

    Rentang nilai dapat dimulai dari Double.MIN_VALUE dan berakhir dengan Double.MAX_VALUE.

    subAggs dan subGroupBys

    Operasi sub-agregasi. Anda dapat melakukan operasi sub-agregasi berdasarkan hasil pengelompokan.

    Sebagai contoh, setelah Anda mengelompokkan hasil kueri berdasarkan volume penjualan dan berdasarkan provinsi, Anda dapat memperoleh provinsi yang memiliki proporsi volume penjualan terbesar dalam rentang tertentu. Anda harus menentukan nilai untuk GroupByField dalam GroupByRange untuk melakukan kueri ini.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                { 
                    name: "group_by_GROUP_BY_RANGE",
                    type: TableStore.GroupByType.GROUP_BY_RANGE,
                    body: {
                        fieldName: "col_long",
                        ranges: [
                            {
                                from: 1,
                                to: 5,
                            },
                            {
                                from: 3,
                                to: 20,
                            },
                        ],
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Pengelompokan Berdasarkan Lokasi Geografis

Metode agregasi ini digunakan untuk mengelompokkan hasil kueri berdasarkan jarak dari lokasi geografis ke titik pusat. Hasil dalam rentang tertentu dikelompokkan bersama, dan jumlah nilai dalam setiap rentang dikembalikan.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk operasi agregasi. Hanya tipe GEOPOINT yang didukung.

    origin(lat, lon)

    Garis bujur dan lintang titik pusat.

    lat menentukan lintang titik pusat. lon menentukan bujur titik pusat.

    ranges[from, to)

    Rentang jarak yang digunakan untuk pengelompokan. Satuan: meter.

    Rentang nilai dapat dimulai dari Double.MIN_VALUE dan berakhir dengan Double.MAX_VALUE.

    subAggs dan subGroupBys

    Operasi sub-agregasi. Anda dapat melakukan operasi sub-agregasi berdasarkan hasil pengelompokan.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                { 
                    name: "group_by_GROUP_BY_GEO_DISTANCE",
                    type: TableStore.GroupByType.GROUP_BY_GEO_DISTANCE,
                    body: {
                        fieldName: "col_geo",
                        origin: {
                            lat: 50,
                            lon: 60,
                        },
                        ranges: [
                            {
                                from: 1,
                                to: 2,
                            },
                            {
                                from: 3,
                            },
                        ],
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Pengelompokan Berdasarkan Filter

Metode agregasi ini digunakan untuk menyaring hasil kueri dan mengelompokkannya berdasarkan filter. Jumlah hasil yang sesuai dengan setiap filter dikembalikan dalam urutan filter yang ditentukan.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    filters

    Filter yang dapat digunakan untuk kueri. Hasil dikembalikan dalam urutan filter yang ditentukan.

    subAggs dan subGroupBys

    Operasi sub-agregasi. Anda dapat melakukan operasi sub-agregasi berdasarkan hasil pengelompokan.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                { 
                    name: "group_by_GROUP_BY_FILTER",
                    type: TableStore.GroupByType.GROUP_BY_FILTER,
                    body: {
                        filters: [
                            {
                                queryType: TableStore.QueryType.MATCH_ALL_QUERY,
                            },
                            {
                                queryType: TableStore.QueryType.WILDCARD_QUERY,
                                query: {
                                    fieldName: "col_keyword",
                                    value: "1*"
                                },
                            },
                        ],
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Kueri Berdasarkan Histogram

Metode agregasi ini digunakan untuk mengelompokkan hasil kueri berdasarkan interval data tertentu. Nilai dalam rentang yang sama dikelompokkan bersama, dan rentang serta jumlah nilai dalam setiap kelompok dikembalikan.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    fieldName

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG dan DOUBLE yang didukung.

    interval

    Interval data yang digunakan untuk mendapatkan hasil agregasi.

    fieldRange[min,max]

    Rentang yang digunakan bersama dengan parameter interval untuk membatasi jumlah kelompok. Nilai yang dihitung menggunakan rumus tidak boleh melebihi 2.000.

    minDocCount

    Jumlah baris minimum. Jika jumlah baris dalam kelompok kurang dari jumlah baris minimum, hasil agregasi untuk kelompok tersebut tidak dikembalikan.

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

    • Jika Anda tidak menentukan nilai untuk missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                 { 
                    name: "group_by_GROUP_BY_HISTOGRAM",
                    type: TableStore.GroupByType.GROUP_BY_HISTOGRAM,
                    body: {
                        fieldName: "col_long",
                        interval: Long.fromNumber(3),
                        missing: Long.fromNumber(123),
                        minDocCount: 5,
                        fieldRange: {
                            min: Long.fromNumber(1),
                            max: Long.fromNumber(999),
                        },
                        sort: {
                            sorters: [
                                {
                                    groupKeySort: {
                                        order: TableStore.SortOrder.SORT_ORDER_ASC,
                                    },
                                },
                                {
                                    rowCountSort: {
                                        order: TableStore.SortOrder.SORT_ORDER_ASC,
                                    },
                                },
                            ],
                        },
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

Kueri Baris yang Diperoleh dari Hasil Operasi Agregasi di Setiap Kelompok

Setelah mengelompokkan hasil kueri, Anda dapat menanyakan baris dalam setiap kelompok. Metode ini bekerja mirip dengan fungsi ANY_VALUE(field) di MySQL.

Catatan

Saat menanyakan baris yang diperoleh dari hasil agregasi di setiap kelompok, hasil yang dikembalikan hanya mencakup informasi kunci utama jika indeks pencarian berisi bidang Nested, Geopoint, atau Array. Untuk mendapatkan bidang yang diperlukan, Anda harus menanyakan tabel data.

  • Parameter

    Parameter

    Deskripsi

    nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    limit

    Jumlah maksimum baris yang dapat dikembalikan untuk setiap kelompok. Secara default, hanya satu baris data yang dikembalikan.

    sort

    Metode pengurutan yang digunakan untuk mengurutkan data dalam kelompok.

    columnsToGet

    Bidang yang ingin Anda kembalikan. Hanya bidang dalam indeks pencarian yang didukung. Bidang ARRAY, DATE, GEOPOINT, dan NESTED tidak didukung.

    Nilai parameter ini sama dengan nilai columnsToGet dalam SearchRequest. Anda hanya perlu menentukan columnsToGet dalam SearchRequest.

  • Contoh

    Formulir aplikasi aktivitas sekolah berisi bidang tempat informasi seperti nama siswa, kelas, guru kelas, dan ketua kelas dapat ditentukan. Anda dapat mengelompokkan siswa berdasarkan kelas untuk melihat statistik aplikasi dan informasi properti setiap kelas. Pernyataan SQL yang setara adalah select className, ANY_VALUE(teacher), ANY_VALUE(monitor), COUNT(*) as number from table GROUP BY className.

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: true,
        groupBys: {
            groupBys: [
                {
                    name: "group_by_name_xxx",
                    type: TableStore.GroupByType.GROUP_BY_FIELD,
                    body: {
                        fieldName: "className",
                        size: 200,
                        subAggs: {
                            aggs: [
                                {
                                    name: "top_row_name_xxx",
                                    type: TableStore.AggregationType.AGG_TOP_ROWS,
                                    body: {
                                        limit: 1,
                                        sort: {
                                            sorters: [
                                                {
                                                    fieldSort: {
                                                        fieldName: "teacher",
                                                        order: TableStore.SortOrder.SORT_ORDER_DESC,
                                                    },
                                                },
                                            ],
                                        },
                                    },
                                },
                            ],
                        },
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Tentukan kolom yang ingin Anda kembalikan. Anda dapat mengatur RETURN_SPECIFIED untuk mengembalikan kolom tertentu, RETURN_ALL untuk mengembalikan semua kolom, RETURN_ALL_FROM_INDEX untuk mengembalikan semua kolom dalam indeks pencarian, atau RETURN_NONE untuk hanya mengembalikan kolom kunci utama.
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });