全部产品
Search
文档中心

Tablestore:Aggregasi

更新时间:Jul 06, 2025

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

Prosedur

Gambar berikut mengilustrasikan prosedur lengkap untuk agregasi.

fig_agg_pro

Server memeriksa data yang memenuhi kondisi kueri dan melakukan agregasi sesuai dengan permintaan. Permintaan yang melibatkan agregasi biasanya 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.

TopRows

Metode agregasi yang dapat digunakan untuk mendapatkan statistik baris teratas yang diurutkan berdasarkan bidang tertentu untuk setiap grup.

Pengelompokan berdasarkan nilai bidang

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

Catatan

Jumlah yang dihitung mungkin berbeda dari jumlah sebenarnya jika jumlah nilai dalam suatu grup 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 cocok dengan setiap filter. Hasil dikembalikan sesuai 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 grup dan jumlah nilai dalam setiap grup dikembalikan.

Bersarang

GroupBy mendukung bersarang. Anda dapat melakukan operasi sub-agregasi menggunakan GroupBy.

Prasyarat

Nilai minimum

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    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 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 dari suatu bidang dan bekerja serupa dengan fungsi MAX SQL.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    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 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);

Jumlah

Metode agregasi ini mengembalikan jumlah semua nilai numerik dalam suatu bidang dan bekerja serupa dengan fungsi SUM SQL.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe 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 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 numerik dalam suatu bidang dan bekerja serupa dengan fungsi AVG SQL.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    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 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);

Jumlah

Metode agregasi ini mengembalikan jumlah total nilai untuk suatu bidang tertentu atau jumlah total baris dalam indeks pencarian. Metode ini bekerja serupa dengan fungsi COUNT SQL.

Catatan

Anda dapat menggunakan salah satu metode berikut untuk memeriksa jumlah total baris dalam indeks pencarian atau jumlah baris yang memenuhi kondisi kueri:

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

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

Anda dapat menggunakan nama kolom sebagai nilai ekspresi count untuk memeriksa jumlah baris yang berisi kolom dalam indeks pencarian. Metode ini cocok untuk skenario yang melibatkan kolom jarang.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    Nama bidang yang digunakan untuk melakukan 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);

Jumlah unik

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

Catatan

Jumlah nilai unik adalah 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

    name

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

    field_name

    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 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 dataset. Misalnya, ketika Anda mengumpulkan statistik tentang waktu respons setiap permintaan selama pemeliharaan rutin sistem, Anda dapat menganalisis distribusi waktu respons menggunakan persentil seperti p25, p50, p90, dan p99.

Catatan
  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    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 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 mengembalikan statistik baris teratas yang diurutkan berdasarkan bidang tertentu untuk setiap grup.

Setelah mengelompokkan hasil kueri menggunakan GroupBy, Anda dapat memeriksa baris dalam setiap grup. Metode ini bekerja serupa dengan ANY_VALUE(field) di MySQL.

  • Parameter

    Parameter

    Deskripsi

    name

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

    limit

    Jumlah baris teratas yang ingin Anda kembalikan untuk setiap grup.

    sort

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

    columns_to_get

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

    Catatan

    Ketika Anda memeriksa baris yang diperoleh dari hasil operasi agregasi dalam setiap grup, hasil yang dikembalikan hanya berisi informasi kunci utama jika indeks pencarian berisi bidang Nested, Geopoint, atau Array. Untuk mendapatkan bidang yang diperlukan, Anda harus memeriksa 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);

Pengelompokan berdasarkan nilai bidang

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

Catatan

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

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

    sort

    Aturan pengurutan untuk grup. Secara default, grup diurutkan berdasarkan jumlah item dalam grup secara menurun. Jika Anda mengonfigurasi beberapa aturan pengurutan, grup diurutkan berdasarkan urutan konfigurasi aturan tersebut. Parameter 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 grup yang ingin Anda kembalikan. Nilai default: 10. Nilai maksimum: 2000. Jika jumlah grup melebihi 2.000, hanya 2.000 grup pertama yang dikembalikan.

    sub_aggs dan sub_group_bys

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

    • Skenario

      Periksa jumlah produk dalam setiap kategori, dan 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.

    • Hasil 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

    $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);

Pengelompokan berdasarkan rentang

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

    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.

    sub_aggs dan sub_group_bys

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

    Misalnya, 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

    $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);

Pengelompokan berdasarkan lokasi geografis

Metode agregasi ini 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

    name

    Nama unik operasi agregasi. Anda dapat memeriksa 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 lintang titik pusat.

    lat menentukan lintang titik pusat. lon menentukan 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 dan berakhir dengan Double.MAX_VALUE.

    sub_aggs dan sub_group_bys

    Operasi sub-agregasi. Anda dapat melakukan 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);

Pengelompokan berdasarkan filter

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

  • Parameter

    Parameter

    Deskripsi

    name

    Nama unik operasi agregasi. Anda dapat memeriksa 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 melakukan 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);

Kueri berdasarkan histogram

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field_name

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

    interval

    Interval data yang digunakan untuk mendapatkan hasil agregasi.

    field_range[min,max]

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

    min_doc_count

    Jumlah baris minimum. Jika jumlah baris dalam suatu grup kurang dari jumlah baris minimum, hasil agregasi untuk grup 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 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);

Bersarang

GroupBy mendukung operasi bersarang, memungkinkan sub-agregasi dalam grup.

Operasi bersarang dapat digunakan untuk melakukan sub-agregasi dalam grup. Misalnya, Anda dapat melakukan operasi agregasi bersarang hingga dua tingkat.

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

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

Catatan

Untuk menyeimbangkan performa, kompleksitas, dan faktor lainnya, operasi bersarang dibatasi hingga jumlah tingkat tertentu. Untuk informasi lebih lanjut, lihat Batas Indeks Pencarian.

$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);