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.

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
Instansi OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Instansi OTSClient.
Tabel data telah dibuat dan data telah ditulis ke dalam tabel. Untuk informasi lebih lanjut, lihat Buat Tabel Data dan Tulis Data.
Indeks pencarian telah dibuat untuk tabel data. Untuk informasi lebih lanjut, lihat Buat Indeks Pencarian.
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.
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.
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.
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.
CatatanKetika 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.
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.
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);