All Products
Search
Document Center

Tablestore:Agregasi

Last Updated:Sep 30, 2026

Anda dapat melakukan operasi agregasi untuk memperoleh nilai minimum, maksimum, jumlah, dan rata-rata, serta menghitung jumlah baris dan jumlah nilai unik. Operasi agregasi juga memungkinkan pengelompokan hasil berdasarkan nilai bidang, rentang, lokasi geografis, atau filter, serta menjalankan kueri bersarang. Beberapa operasi agregasi dapat digabungkan untuk menangani kueri kompleks.

Prosedur

Gambar berikut menunjukkan prosedur agregasi lengkap.

fig_agg_pro

Server menjalankan kueri terhadap data yang memenuhi kondisi kueri, lalu melakukan agregasi sesuai permintaan. Oleh karena itu, permintaan yang memerlukan agregasi lebih kompleks untuk diproses dibandingkan permintaan tanpa agregasi.

Informasi latar belakang

Tabel berikut menjelaskan metode agregasi.

Metode

Deskripsi

Nilai minimum

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

Nilai maksimum

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

Sum

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

Nilai rata-rata

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

Count

Metode agregasi yang dapat digunakan untuk mengembalikan jumlah total nilai untuk bidang tertentu atau jumlah total baris dalam search index. Metode ini dapat digunakan dengan cara yang serupa dengan fungsi SQL COUNT.

Distinct count

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

Statistik persentil

Nilai persentil menunjukkan posisi relatif suatu nilai dalam set data. Misalnya, ketika Anda mengumpulkan statistik tentang response time setiap permintaan selama O&M rutin sistem Anda, Anda harus menganalisis distribusi response time menggunakan persentil seperti p25, p50, p90, dan p99.

Group by field value

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 dalam setiap kelompok dikembalikan.

Catatan

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

Group by range

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.

Group by geographical location

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.

Group by filter

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

Query by 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.

Query the rows that are obtained from the results of an aggregation operation in each group

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

Prasyarat

Nilai minimum

Metode agregasi ini mengembalikan nilai minimum suatu bidang dan berfungsi serupa dengan fungsi SQL MIN.

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

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

    missing

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

    • Jika Anda tidak menentukan nilai untuk missing, baris tersebut 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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 mengembalikan nilai maksimum suatu bidang dan berfungsi serupa dengan fungsi SQL MAX.

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

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

    missing

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

    • Jika Anda tidak menentukan nilai untuk missing, baris tersebut 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });

Sum

Metode agregasi ini mengembalikan jumlah semua nilai pada bidang numerik dan berfungsi serupa dengan fungsi SQL SUM.

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

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

    missing

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

    • Jika Anda tidak menentukan nilai untuk missing, baris tersebut 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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 mengembalikan rata-rata semua nilai pada bidang numerik dan berfungsi serupa dengan fungsi SQL AVG.

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

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

    missing

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

    • Jika Anda tidak menentukan nilai untuk missing, baris tersebut 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });

Count

Metode agregasi ini mengembalikan jumlah total nilai untuk bidang tertentu atau jumlah total baris dalam Search Index, dan berfungsi serupa dengan fungsi SQL COUNT.

Catatan

Untuk mengkueri jumlah total baris dalam Search Index atau jumlah total baris yang memenuhi kondisi kueri, Anda dapat:

  • Menggunakan fitur count agregasi dengan menentukan count(*) dalam permintaan.

  • Menggunakan fitur kueri dengan mengatur setGetTotalCount ke true. Gunakan MatchAllQuery untuk memperoleh jumlah total baris dalam Search Index.

Anda juga dapat menggunakan nama kolom sebagai ekspresi count untuk mengkueri jumlah baris yang berisi kolom tersebut dalam Search Index. Pendekatan ini cocok untuk skenario yang melibatkan kolom sparse.

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

    Nama bidang yang digunakan untuk menjalankan 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });

Distinct count

Metode agregasi ini mengembalikan jumlah nilai unik untuk suatu bidang dan berfungsi serupa dengan fungsi SQL COUNT(DISTINCT).

Catatan

Jumlah nilai unik merupakan angka perkiraan.

  • Jika jumlah total baris sebelum penerapan distinct count kurang dari 10.000, hasilnya mendekati nilai eksak.

  • Jika jumlah total baris sebelum penerapan distinct count mencapai 100 juta atau lebih, tingkat error sekitar 2%.

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

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

    missing

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

    • Jika Anda tidak menentukan nilai untuk missing, baris tersebut 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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 set data. Misalnya, saat mengumpulkan statistik response time setiap permintaan selama operasi dan pemeliharaan (O&M) rutin sistem, Anda perlu menganalisis distribusi response time menggunakan persentil seperti p25, p50, p90, dan p99.

Catatan

Untuk meningkatkan akurasi hasil, disarankan menentukan nilai persentil ekstrem seperti p1 dan p99. Penggunaan nilai persentil ekstrem menghasilkan output yang lebih akurat dibandingkan nilai seperti p50.

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

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

    percentiles

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

    missing

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

    • Jika Anda tidak menentukan nilai untuk missing, baris tersebut 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });

Group by field value

Metode agregasi ini mengelompokkan hasil kueri berdasarkan nilai bidang. Nilai yang sama dikelompokkan bersama, dan sistem mengembalikan nilai identik dari setiap kelompok beserta jumlah kemunculannya.

Catatan

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

    Nama bidang yang digunakan untuk menjalankan 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 descending. Jika Anda mengonfigurasi beberapa aturan pengurutan, kelompok diurutkan berdasarkan urutan aturan yang dikonfigurasi. Aturan pengurutan yang didukung:

    • Urutkan berdasarkan nilai secara alfabetis.

    • Urutkan berdasarkan nilai secara alfabetis terbalik.

    • Urutkan berdasarkan jumlah baris secara ascending.

    • Urutkan berdasarkan jumlah baris secara descending.

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

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

    size

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

    subAggs and subGroupBys

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

    • Skenario

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

    • Metode

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

    • Contoh:

      • Buah-buahan: 5. Harga maksimum USD 2. Harga minimum USD 0,5.

      • Perlengkapan mandi: 10. Harga maksimum USD 13. Harga minimum USD 0,1.

      • Perangkat elektronik: 3. Harga maksimum USD 1.160. Harga minimum USD 310.

      • Produk lainnya: 15. Harga maksimum USD 130. Harga minimum USD 11.

  • 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: { // Nested subGroupBys. 
                            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: { // Nested sub-aggregations. 
                                            aggs: [
                                                {
                                                    name: "AGG_COUNT_test",
                                                    type: TableStore.AggregationType.AGG_COUNT,
                                                    body: {
                                                        fieldName: "*",
                                                        missing: 8,
                                                    },
                                                },
                                            ],
                                        },
                                    },
                                },
                            ],
                        },
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });

Group by range

Metode agregasi ini mengelompokkan hasil kueri berdasarkan rentang nilai suatu bidang. Nilai bidang yang berada dalam rentang yang sama dikelompokkan bersama, dan sistem mengembalikan jumlah nilai dalam setiap rentang.

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

    Nama bidang yang digunakan untuk menjalankan 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 hingga Double.MAX_VALUE.

    subAggs and subGroupBys

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

    Misalnya, setelah Anda mengelompokkan hasil kueri berdasarkan volume penjualan dan provinsi, Anda dapat memperoleh provinsi yang memiliki proporsi volume penjualan terbesar dalam rentang tertentu. Anda harus menentukan nilai GroupByField dalam GroupByRange untuk menjalankan 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });

Group by geographical location

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

  • Parameter

    Parameter

    Deskripsi

    name

    Nama unik operasi agregasi. Anda dapat mengkueri 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 garis bujur titik pusat.

    ranges[from, to)

    Rentang jarak yang digunakan untuk pengelompokan. Satuan: meter.

    Rentang nilai dapat dimulai dari Double.MIN_VALUE hingga Double.MAX_VALUE.

    subAggs and subGroupBys

    Operasi sub-agregasi. Anda dapat menjalankan 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });

Group by filter

Metode agregasi ini memfilter hasil kueri dan mengelompokkannya berdasarkan setiap filter untuk memperoleh jumlah hasil yang sesuai dengan masing-masing filter. Hasil dikembalikan sesuai urutan filter yang ditentukan.

  • Parameter

    Parameter

    Deskripsi

    name

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

    filters

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

    subAggs and subGroupBys

    Operasi sub-agregasi. Anda dapat menjalankan 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });

Query by histogram

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    fieldName

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

    interval

    Interval data yang digunakan untuk memperoleh hasil agregasi.

    fieldRange[min,max]

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

    minDocCount

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

    missing

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

    • Jika Anda tidak menentukan nilai untuk missing, baris tersebut 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });

Query the rows that are obtained from the results of an aggregation operation in each group

Setelah mengelompokkan hasil kueri, Anda dapat mengkueri baris-baris dalam setiap kelompok. Metode ini berfungsi serupa dengan fungsi ANY_VALUE(field) di MySQL.

Catatan

Saat mengkueri baris hasil operasi agregasi dalam setiap kelompok, hasil yang dikembalikan hanya berisi informasi kunci primer jika Search Index berisi bidang Nested, Geopoint, atau Array. Untuk memperoleh bidang lainnya, Anda harus mengkueri tabel data.

  • Parameter

    Parameter

    Deskripsi

    name

    Nama unik operasi agregasi. Anda dapat mengkueri 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 dikembalikan. Hanya bidang dalam search index 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 kegiatan sekolah berisi bidang tempat informasi seperti nama siswa, kelas, wali 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: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. 
            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);
        }
    });