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 (distinct count). Anda juga dapat mengelompokkan hasil berdasarkan nilai bidang, rentang, lokasi geografis, atau filter, serta menjalankan kueri bersarang (nested queries). Beberapa operasi agregasi dapat digabungkan untuk menangani kueri yang kompleks.

Prosedur

Gambar berikut menunjukkan prosedur agregasi lengkap.

fig_agg_pro

Server mengkueri data yang memenuhi kondisi kueri dan melakukan agregasi terhadap data tersebut 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 mirip seperti fungsi SQL MIN.

Nilai maksimum

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

Sum

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

Nilai rata-rata

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

Count

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

Distinct count

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

Statistik persentil

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

TopRows

Metode agregasi yang dapat digunakan untuk memperoleh statistik baris teratas yang diurutkan berdasarkan bidang tertentu untuk setiap kelompok.

Group by field value

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan nilai bidang. Nilai-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 lokasi geografis dari titik pusat. Hasil kueri yang jaraknya berada dalam rentang tertentu dikelompokkan bersama. Jumlah nilai dalam setiap rentang dikembalikan.

Group by filter

Metode agregasi yang dapat digunakan untuk menyaring hasil kueri dan mengelompokkannya guna 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.

Nesting

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.

    field_name

    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

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_min',
                        'type' => AggregationTypeConst::AGG_MIN,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

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.

    field_name

    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

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_max',
                        'type' => AggregationTypeConst::AGG_MAX,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

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.

    field_name

    Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe 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

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_sum',
                        'type' => AggregationTypeConst::AGG_SUM,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

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.

    field_name

    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

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_avg',
                        'type' => AggregationTypeConst::AGG_AVG,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Count

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

Catatan

Anda dapat menggunakan salah satu metode berikut untuk mengkueri jumlah total baris dalam Search Index atau jumlah baris yang memenuhi kondisi kueri:

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

  • Gunakan fitur kueri untuk memperoleh jumlah baris yang memenuhi kondisi kueri. Atur setGetTotalCount ke true dalam kueri. 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. Metode 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.

    field_name

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

  • Contoh

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_count',
                        'type' => AggregationTypeConst::AGG_COUNT,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Distinct count

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

Catatan

Jumlah nilai unik merupakan angka perkiraan.

  • Jika jumlah total baris sebelum penggunaan fitur distinct count kurang dari 10.000, hasil yang dihitung mendekati nilai eksak.

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    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

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_distinct_count',
                        'type' => AggregationTypeConst::AGG_DISTINCT_COUNT,
                        'body' => array(
                            'field_name' => 'boolean',
                            'missing' => false
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Statistik persentil

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

Catatan

Untuk meningkatkan akurasi hasil, kami menyarankan agar Anda menentukan nilai persentil ekstrem seperti p1 dan p99. Hasil yang dikembalikan akan lebih akurat jika menggunakan nilai persentil ekstrem dibandingkan nilai seperti p50.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    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

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_percentiles',
                        'type' => AggregationTypeConst::AGG_PERCENTILES,
                        'body' => array(
                            'field_name' => 'long',
                            'percentiles' => array(60, 80, 100),
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

TopRows

Metode agregasi ini memperoleh statistik baris teratas yang diurutkan berdasarkan bidang tertentu untuk setiap kelompok.

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    limit

    Jumlah baris teratas yang ingin dikembalikan untuk setiap kelompok.

    sort

    Aturan pengurutan baris dalam setiap kelompok. Jumlah baris teratas yang ditentukan dan diurutkan berdasarkan aturan pengurutan dikembalikan untuk setiap kelompok.

    columns_to_get

    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 columns_to_get dalam permintaan. Anda hanya perlu menentukan columns_to_get dalam permintaan.

    Catatan

    Saat Anda mengkueri baris yang diperoleh dari hasil operasi agregasi dalam setiap kelompok, hasil yang dikembalikan hanya berisi informasi primary key jika search index berisi bidang Nested, Geopoint, atau Array. Untuk memperoleh bidang yang diperlukan, Anda harus mengkueri tabel data.

  • Contoh

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
              'aggs' => array(
            'aggs' => array(
                    array(
                        'name' => 'avg_top_rows',
                        'type' => AggregationTypeConst::AGG_TOP_ROWS,
                        'body' => array(
                            'limit' => 2,
                            'sort' => array(
                                'sorters' => array(
                                    array(
                                        'field_sort' => array(
                                            'field_name' => 'long',
                                            'order' => SortOrderConst::SORT_ORDER_DESC
                                        )
                                    )
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Group by field value

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

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.

    field_name

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

    sort

    Aturan pengurutan 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. Parameter 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.

    sub_aggs dan sub_group_bys

    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 hasil

      • 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

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_FIELD',
                        'type' => GroupByTypeConst::GROUP_BY_FIELD,
                        'body' => array(
                            'field_name' => 'boolean',
                            'size' => 3,
                            'min_doc_count' => 0,
                            'sort' => array(
                                'sorters' => array(
                                    array(
                                        'group_key_sort' => array(
                                            'order' => SortOrderConst::SORT_ORDER_DESC
                                        ),
                                    ),
                                )
                            ),
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Group by range

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    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.

    sub_aggs dan sub_group_bys

    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

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_RANGE',
                        'type' => GroupByTypeConst::GROUP_BY_RANGE,
                        'body' => array(
                            'field_name' => 'long',
                            'ranges' => array(
                                array(
                                    'from' => 1,
                                    'to' => 3
                                ),
                                array(
                                    'from' => 3,
                                    'to' => 6
                                ),
                                array(
                                    'from' => 6,
                                    'to' => 10
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Group by geographical location

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

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

    origin(lat, lon)

    Garis bujur dan garis lintang titik pusat.

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

    ranges[from, to)

    Rentang jarak yang digunakan untuk pengelompokan. Satuan: meter. Nilai from dan to bertipe DOUBLE.

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

    sub_aggs dan sub_group_bys

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

  • Contoh

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_GEO_DISTANCE',
                        'type' => GroupByTypeConst::GROUP_BY_GEO_DISTANCE,
                        'body' => array(
                            'field_name' => 'geo',
                            'origin' => array(
                                'lat' => 5,
                                'lon' => 6
                            ),
                            'ranges' => array(
                                array(
                                    'from' => 0.,
                                    'to' => 1000.
                                ),
                                array(
                                    'from' => 10000.,
                                    'to' => 100000.
                                ),
                                array(
                                    'from' => 100000.,
                                ),
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Group by filter

Metode agregasi ini menyaring hasil kueri dan mengelompokkannya untuk memperoleh jumlah hasil yang sesuai dengan setiap 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.

    sub_aggs dan sub_group_bys

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

  • Contoh

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_FILTER',
                        'type' => GroupByTypeConst::GROUP_BY_FILTER,
                        'body' => array(
                            'filters' => array(
                                array(
                                    'query_type' => QueryTypeConst::TERM_QUERY,
                                    'query' => array(
                                        'field_name' => 'boolean',
                                        'term' => false
                                    )
                                ),
                                array(
                                    'query_type' => QueryTypeConst::TERM_QUERY,
                                    'query' => array(
                                        'field_name' => 'boolean',
                                        'term' => true
                                    )
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Query by histogram

Metode agregasi ini mengelompokkan hasil kueri berdasarkan interval data tertentu. Nilai bidang yang berada dalam rentang yang sama dikelompokkan bersama, dan rentang nilai setiap kelompok beserta jumlah nilainya dikembalikan.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

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

    interval

    Interval data yang digunakan untuk memperoleh hasil agregasi.

    field_range[min,max]

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

    min_doc_count

    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

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_HISTOGRAM',
                        'type' => GroupByTypeConst::GROUP_BY_HISTOGRAM,
                        'body' => array(
                            'field_name' => 'long',
                            'interval' => 3,
                            'missing' => 0,
                            'min_doc_count' => 0,
                            'field_range' => array(
                                'min' => 2,
                                'max' => 10,
                            ),
                            'sort' => array(
                                'sorters' => array(
                                    array(
                                        'row_count_sort' => array(
                                            'order' => SortOrderConst::SORT_ORDER_ASC
                                        )
                                    )
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Nesting

Anda dapat menggunakan nesting untuk menjalankan operasi sub-agregasi dalam suatu kelompok. Misalnya, Anda dapat menjalankan operasi agregasi bersarang hingga dua tingkat.

  • GroupBy + SubGroupBy: Item dikelompokkan berdasarkan provinsi dan kota untuk memperoleh data setiap kota dalam setiap provinsi.

  • GroupBy + SubAggregation: Item dikelompokkan berdasarkan provinsi dan nilai maksimum suatu metrik dihitung untuk memperoleh nilai maksimum metrik tersebut untuk setiap provinsi.

Catatan

Untuk menyeimbangkan performa dan kompleksitas, hanya jumlah lapisan nesting tertentu yang diizinkan. Untuk informasi selengkapnya, lihat Batasan Search Index.

$request = array(
    'table_name' => 'myTableName',
    'index_name' => 'myIndexName',
    'search_query' => array(
        'offset' => 0,
        'limit' => 0,
        'get_total_count' => true,
        'query' => array(
            'query_type' => QueryTypeConst::MATCH_ALL_QUERY
        ),
        'group_bys' => array(
            'group_bys' => array(
                array(
                    'name' => 'group_by_GROUP_BY_FIELD',
                    'type' => GroupByTypeConst::GROUP_BY_FIELD,
                    'body' => array(
                        'field_name' => 'boolean',
                        'size' => 3,
                        'min_doc_count' => 0,
                        'sort' => array(
                            'sorters' => array(
                                array(
                                    'group_key_sort' => array(
                                        'order' => SortOrderConst::SORT_ORDER_DESC
                                    ),
                                ),
                            )
                        ),
                        'sub_aggs' => array(
                            'aggs' => array(
                                array(
                                    'name' => 'groupSum',
                                    'type' => AggregationTypeConst::AGG_SUM,
                                    'body' => array(
                                        'field_name' => 'long',
                                        'missing' => 0
                                    )
                                ),
                            ),
                        ),
                    )
                ),
            ),
        )
    ),
    'columns_to_get' => array(
        'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
    ),
);

$response = $this->otsClient->search($request);
$group_by_results = $response["group_bys"]["group_by_results"];

print json_encode($group_by_results, JSON_PRETTY_PRINT);