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.

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
-
Instans OTSClient telah diinisialisasi. Untuk informasi selengkapnya, lihat Inisialisasi instans OTSClient.
-
Tabel data telah dibuat dan data telah ditulis ke dalam tabel. Untuk informasi selengkapnya, lihat Membuat tabel data dan Menulis data.
-
Search Index telah dibuat untuk tabel data tersebut. Untuk informasi selengkapnya, lihat Buat Search Index.
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.
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).
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.
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.
CatatanSaat 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.
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.
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);