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

Server menjalankan kueri terhadap data yang memenuhi kondisi kueri, lalu melakukan agregasi sesuai permintaan. Oleh karena itu, permintaan yang memerlukan agregasi lebih kompleks untuk diproses dibandingkan permintaan tanpa agregasi.
Informasi latar belakang
Tabel berikut menjelaskan metode agregasi.
|
Metode |
Deskripsi |
|
Nilai minimum |
Metode agregasi yang dapat digunakan untuk mengembalikan nilai minimum suatu bidang. Metode ini dapat digunakan dengan cara yang serupa dengan fungsi SQL MIN. |
|
Nilai maksimum |
Metode agregasi yang dapat digunakan untuk mengembalikan nilai maksimum suatu bidang. Metode ini dapat digunakan dengan cara yang serupa dengan fungsi SQL MAX. |
|
Sum |
Metode agregasi yang dapat digunakan untuk mengembalikan jumlah semua nilai untuk bidang numerik. Metode ini dapat digunakan dengan cara yang serupa dengan fungsi SQL SUM. |
|
Nilai rata-rata |
Metode agregasi yang dapat digunakan untuk mengembalikan rata-rata semua nilai untuk bidang numerik. Metode ini dapat digunakan dengan cara yang serupa dengan fungsi SQL AVG. |
|
Count |
Metode agregasi yang dapat digunakan untuk mengembalikan jumlah total nilai untuk bidang tertentu atau jumlah total baris dalam search index. Metode ini dapat digunakan dengan cara yang serupa dengan fungsi SQL COUNT. |
|
Distinct count |
Metode agregasi yang dapat digunakan untuk mengembalikan jumlah nilai unik untuk suatu bidang. Metode ini dapat digunakan dengan cara yang serupa dengan fungsi SQL COUNT(DISTINCT). |
|
Statistik persentil |
Nilai persentil menunjukkan posisi relatif suatu nilai dalam set data. Misalnya, ketika Anda mengumpulkan statistik tentang response time setiap permintaan selama O&M rutin sistem Anda, Anda harus menganalisis distribusi response time menggunakan persentil seperti p25, p50, p90, dan p99. |
|
Group by field value |
Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan nilai bidang. Nilai yang sama dikelompokkan bersama. Nilai identik dari setiap kelompok dan jumlah nilai identik dalam setiap kelompok dikembalikan. Catatan
Jumlah yang dihitung mungkin berbeda dari jumlah aktual jika jumlah nilai dalam suatu kelompok sangat besar. |
|
Group by range |
Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan rentang nilai suatu bidang. Nilai bidang yang berada dalam rentang tertentu dikelompokkan bersama. Jumlah nilai dalam setiap rentang dikembalikan. |
|
Group by geographical location |
Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan jarak dari lokasi geografis ke titik pusat. Hasil kueri dalam jarak yang berada dalam rentang tertentu dikelompokkan bersama. Jumlah nilai dalam setiap rentang dikembalikan. |
|
Group by filter |
Metode agregasi yang dapat digunakan untuk memfilter hasil kueri dan mengelompokkannya bersama untuk memperoleh jumlah hasil yang sesuai dengan setiap filter. Hasil dikembalikan sesuai urutan filter yang ditentukan. |
|
Query by histogram |
Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan interval data tertentu. Nilai bidang yang berada dalam rentang yang sama dikelompokkan bersama. Rentang nilai setiap kelompok dan jumlah nilai dalam setiap kelompok dikembalikan. |
|
Query the rows that are obtained from the results of an aggregation operation in each group |
Setelah Anda mengelompokkan hasil kueri, Anda dapat melakukan kueri terhadap baris-baris dalam setiap kelompok. Metode ini dapat digunakan dengan cara yang serupa dengan fungsi ANY_VALUE(field) di MySQL. |
Prasyarat
-
Instans OTSClient telah diinisialisasi. Untuk informasi selengkapnya, lihat Initialize an OTSClient instance.
-
Tabel data telah dibuat dan datanya telah ditulis ke dalam tabel tersebut. Untuk informasi selengkapnya, lihat Create data tables dan Write data.
-
Search Index telah dibuat untuk tabel data. Untuk informasi selengkapnya, lihat Create a 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.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe LONG, DOUBLE, dan DATE yang didukung.
missing
Nilai default untuk bidang yang digunakan dalam operasi agregasi pada suatu baris ketika nilai bidang kosong.
-
Jika Anda tidak menentukan nilai untuk missing, baris tersebut diabaikan.
-
Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.
-
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, aggs: { aggs: [ { name: "min_test", type: TableStore.AggregationType.AGG_MIN, body: { fieldName: "col_long", missing: 333, }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Nilai maksimum
Metode agregasi ini mengembalikan nilai maksimum suatu bidang dan berfungsi serupa dengan fungsi SQL MAX.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe LONG, DOUBLE, dan DATE yang didukung.
missing
Nilai default untuk bidang yang digunakan dalam operasi agregasi pada suatu baris ketika nilai bidang kosong.
-
Jika Anda tidak menentukan nilai untuk missing, baris tersebut diabaikan.
-
Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.
-
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, aggs: { aggs: [ { name: "max_test", type: TableStore.AggregationType.AGG_MAX, body: { fieldName: "col_long", missing: 333, }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Sum
Metode agregasi ini mengembalikan jumlah semua nilai pada bidang numerik dan berfungsi serupa dengan fungsi SQL SUM.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe data LONG dan DOUBLE yang didukung.
missing
Nilai default untuk bidang yang digunakan dalam operasi agregasi pada suatu baris ketika nilai bidang kosong.
-
Jika Anda tidak menentukan nilai untuk missing, baris tersebut diabaikan.
-
Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.
-
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, aggs: { aggs: [ { name: "sum_test", type: TableStore.AggregationType.AGG_SUM, body: { fieldName: "col_long", missing: 444, }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Nilai rata-rata
Metode agregasi ini mengembalikan rata-rata semua nilai pada bidang numerik dan berfungsi serupa dengan fungsi SQL AVG.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe LONG, DOUBLE, dan DATE yang didukung.
missing
Nilai default untuk bidang yang digunakan dalam operasi agregasi pada suatu baris ketika nilai bidang kosong.
-
Jika Anda tidak menentukan nilai untuk missing, baris tersebut diabaikan.
-
Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.
-
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, aggs: { aggs: [ { name: "avg_test", type: TableStore.AggregationType.AGG_AVG, body: { fieldName: "col_long", missing: 111, }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Count
Metode agregasi ini mengembalikan jumlah total nilai untuk bidang tertentu atau jumlah total baris dalam Search Index, dan berfungsi serupa dengan fungsi SQL COUNT.
Untuk mengkueri jumlah total baris dalam Search Index atau jumlah total baris yang memenuhi kondisi kueri, Anda dapat:
-
Menggunakan fitur count agregasi dengan menentukan count(*) dalam permintaan.
-
Menggunakan fitur kueri dengan mengatur setGetTotalCount ke true. Gunakan MatchAllQuery untuk memperoleh jumlah total baris dalam Search Index.
Anda juga dapat menggunakan nama kolom sebagai ekspresi count untuk mengkueri jumlah baris yang berisi kolom tersebut dalam Search Index. Pendekatan ini cocok untuk skenario yang melibatkan kolom sparse.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT, dan DATE yang didukung.
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, aggs: { aggs: [ { name: "count_test", type: TableStore.AggregationType.AGG_COUNT, body: { fieldName: "col_long", }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Distinct count
Metode agregasi ini mengembalikan jumlah nilai unik untuk suatu bidang dan berfungsi serupa dengan fungsi SQL COUNT(DISTINCT).
Jumlah nilai unik merupakan angka perkiraan.
-
Jika jumlah total baris sebelum penerapan distinct count kurang dari 10.000, hasilnya mendekati nilai eksak.
-
Jika jumlah total baris sebelum penerapan distinct count mencapai 100 juta atau lebih, tingkat error sekitar 2%.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT, dan DATE yang didukung.
missing
Nilai default untuk bidang yang digunakan dalam operasi agregasi pada suatu baris ketika nilai bidang kosong.
-
Jika Anda tidak menentukan nilai untuk missing, baris tersebut diabaikan.
-
Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.
-
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, aggs: { aggs: [ { name: "AGG_DISTINCT_COUNT_test", type: TableStore.AggregationType.AGG_DISTINCT_COUNT, body: { fieldName: "col_long", missing: 666, }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Statistik persentil
Nilai persentil menunjukkan posisi relatif suatu nilai dalam set data. Misalnya, saat mengumpulkan statistik response time setiap permintaan selama operasi dan pemeliharaan (O&M) rutin sistem, Anda perlu menganalisis distribusi response time menggunakan persentil seperti p25, p50, p90, dan p99.
Untuk meningkatkan akurasi hasil, disarankan menentukan nilai persentil ekstrem seperti p1 dan p99. Penggunaan nilai persentil ekstrem menghasilkan output yang lebih akurat dibandingkan nilai seperti p50.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe LONG, DOUBLE, dan DATE yang didukung.
percentiles
Persentil seperti p50, p90, dan p99. Anda dapat menentukan satu atau beberapa persentil.
missing
Nilai default untuk bidang yang digunakan dalam operasi agregasi pada suatu baris ketika nilai bidang kosong.
-
Jika Anda tidak menentukan nilai untuk missing, baris tersebut diabaikan.
-
Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.
-
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, aggs: { aggs: [ { name: "AGG_PERCENTILES_test", type: TableStore.AggregationType.AGG_PERCENTILES, body: { fieldName: "col_long", percentiles: [20, 50, 90, 100], missing: 888, }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Group by field value
Metode agregasi ini mengelompokkan hasil kueri berdasarkan nilai bidang. Nilai yang sama dikelompokkan bersama, dan sistem mengembalikan nilai identik dari setiap kelompok beserta jumlah kemunculannya.
Jumlah yang dihitung mungkin berbeda dari jumlah aktual jika jumlah nilai dalam suatu kelompok sangat besar.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe LONG, DOUBLE, BOOLEAN, KEYWORD, dan DATE yang didukung.
sort
Aturan pengurutan untuk kelompok. Secara default, kelompok diurutkan berdasarkan jumlah item dalam kelompok secara descending. Jika Anda mengonfigurasi beberapa aturan pengurutan, kelompok diurutkan berdasarkan urutan aturan yang dikonfigurasi. Aturan pengurutan yang didukung:
-
Urutkan berdasarkan nilai secara alfabetis.
-
Urutkan berdasarkan nilai secara alfabetis terbalik.
-
Urutkan berdasarkan jumlah baris secara ascending.
-
Urutkan berdasarkan jumlah baris secara descending.
-
Urutkan berdasarkan nilai yang diperoleh dari hasil sub-agregasi secara ascending.
-
Urutkan berdasarkan nilai yang diperoleh dari hasil sub-agregasi secara descending.
size
Jumlah kelompok yang ingin dikembalikan. Nilai default: 10. Nilai maksimum: 2000. Jika jumlah kelompok melebihi 2.000, hanya 2.000 kelompok pertama yang dikembalikan.
subAggs and subGroupBys
Operasi sub-agregasi. Anda dapat menjalankan operasi sub-agregasi berdasarkan hasil pengelompokan.
-
Skenario
Kueri jumlah produk dalam setiap kategori, serta harga produk maksimum dan minimum dalam setiap kategori.
-
Metode
Kelompokkan hasil kueri berdasarkan kategori produk untuk memperoleh jumlah produk dalam setiap kategori. Kemudian, jalankan dua operasi sub-agregasi untuk memperoleh harga produk maksimum dan minimum dalam setiap kategori.
-
Contoh:
-
Buah-buahan: 5. Harga maksimum USD 2. Harga minimum USD 0,5.
-
Perlengkapan mandi: 10. Harga maksimum USD 13. Harga minimum USD 0,1.
-
Perangkat elektronik: 3. Harga maksimum USD 1.160. Harga minimum USD 310.
-
Produk lainnya: 15. Harga maksimum USD 130. Harga minimum USD 11.
-
-
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, groupBys: { groupBys: [ { name: "group_by_GROUP_BY_FIELD", type: TableStore.GroupByType.GROUP_BY_FIELD, body: { fieldName: "city", size: 111, sort: { sorters: [ { groupKeySort: { order: TableStore.SortOrder.SORT_ORDER_ASC, }, }, { rowCountSort: { order: TableStore.SortOrder.SORT_ORDER_DESC, }, }, ], }, subGroupBys: { // Nested subGroupBys. groupBys: [ { name: "group_by_GROUP_BY_RANGE", type: TableStore.GroupByType.GROUP_BY_RANGE, body: { fieldName: "age", ranges: [ { from: 4, to: 5, }, { from: 6, to: 7, }, ], subAggs: { // Nested sub-aggregations. aggs: [ { name: "AGG_COUNT_test", type: TableStore.AggregationType.AGG_COUNT, body: { fieldName: "*", missing: 8, }, }, ], }, }, }, ], }, }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Group by range
Metode agregasi ini mengelompokkan hasil kueri berdasarkan rentang nilai suatu bidang. Nilai bidang yang berada dalam rentang yang sama dikelompokkan bersama, dan sistem mengembalikan jumlah nilai dalam setiap rentang.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe LONG dan DOUBLE yang didukung.
ranges[from, to)
Rentang nilai yang digunakan untuk pengelompokan.
Rentang nilai dapat dimulai dari Double.MIN_VALUE hingga Double.MAX_VALUE.
subAggs and subGroupBys
Operasi sub-agregasi. Anda dapat menjalankan operasi sub-agregasi berdasarkan hasil pengelompokan.
Misalnya, setelah Anda mengelompokkan hasil kueri berdasarkan volume penjualan dan provinsi, Anda dapat memperoleh provinsi yang memiliki proporsi volume penjualan terbesar dalam rentang tertentu. Anda harus menentukan nilai GroupByField dalam GroupByRange untuk menjalankan kueri ini.
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, groupBys: { groupBys: [ { name: "group_by_GROUP_BY_RANGE", type: TableStore.GroupByType.GROUP_BY_RANGE, body: { fieldName: "col_long", ranges: [ { from: 1, to: 5, }, { from: 3, to: 20, }, ], }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Group by geographical location
Metode agregasi ini mengelompokkan hasil kueri berdasarkan jarak dari lokasi geografis ke titik pusat. Hasil kueri dalam rentang jarak tertentu dikelompokkan bersama, dan sistem mengembalikan jumlah nilai dalam setiap rentang.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk operasi agregasi. Hanya tipe GEOPOINT yang didukung.
origin(lat, lon)
Garis bujur dan lintang titik pusat.
lat menentukan lintang titik pusat. lon menentukan garis bujur titik pusat.
ranges[from, to)
Rentang jarak yang digunakan untuk pengelompokan. Satuan: meter.
Rentang nilai dapat dimulai dari Double.MIN_VALUE hingga Double.MAX_VALUE.
subAggs and subGroupBys
Operasi sub-agregasi. Anda dapat menjalankan operasi sub-agregasi berdasarkan hasil pengelompokan.
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, groupBys: { groupBys: [ { name: "group_by_GROUP_BY_GEO_DISTANCE", type: TableStore.GroupByType.GROUP_BY_GEO_DISTANCE, body: { fieldName: "col_geo", origin: { lat: 50, lon: 60, }, ranges: [ { from: 1, to: 2, }, { from: 3, }, ], }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Group by filter
Metode agregasi ini memfilter hasil kueri dan mengelompokkannya berdasarkan setiap filter untuk memperoleh jumlah hasil yang sesuai dengan masing-masing filter. Hasil dikembalikan sesuai urutan filter yang ditentukan.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
filters
Filter yang dapat digunakan untuk kueri. Hasil dikembalikan sesuai urutan filter yang ditentukan.
subAggs and subGroupBys
Operasi sub-agregasi. Anda dapat menjalankan operasi sub-agregasi berdasarkan hasil pengelompokan.
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, groupBys: { groupBys: [ { name: "group_by_GROUP_BY_FILTER", type: TableStore.GroupByType.GROUP_BY_FILTER, body: { filters: [ { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, { queryType: TableStore.QueryType.WILDCARD_QUERY, query: { fieldName: "col_keyword", value: "1*" }, }, ], }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Query by histogram
Metode agregasi ini mengelompokkan hasil kueri berdasarkan interval data tertentu. Nilai bidang dalam rentang yang sama dikelompokkan bersama, dan sistem mengembalikan rentang nilai serta jumlah nilai dalam setiap kelompok.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
fieldName
Nama bidang yang digunakan untuk menjalankan operasi agregasi. Hanya tipe LONG dan DOUBLE yang didukung.
interval
Interval data yang digunakan untuk memperoleh hasil agregasi.
fieldRange[min,max]
Rentang yang digunakan bersama parameter interval untuk membatasi jumlah kelompok.
Nilai yang dihitung menggunakan formula tidak boleh melebihi 2.000.minDocCount
Jumlah minimum baris. Jika jumlah baris dalam suatu kelompok kurang dari jumlah minimum baris, hasil agregasi untuk kelompok tersebut tidak dikembalikan.
missing
Nilai default untuk bidang yang digunakan dalam operasi agregasi pada suatu baris ketika nilai bidang kosong.
-
Jika Anda tidak menentukan nilai untuk missing, baris tersebut diabaikan.
-
Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.
-
-
Contoh
let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: false, groupBys: { groupBys: [ { name: "group_by_GROUP_BY_HISTOGRAM", type: TableStore.GroupByType.GROUP_BY_HISTOGRAM, body: { fieldName: "col_long", interval: Long.fromNumber(3), missing: Long.fromNumber(123), minDocCount: 5, fieldRange: { min: Long.fromNumber(1), max: Long.fromNumber(999), }, sort: { sorters: [ { groupKeySort: { order: TableStore.SortOrder.SORT_ORDER_ASC, }, }, { rowCountSort: { order: TableStore.SortOrder.SORT_ORDER_ASC, }, }, ], }, }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });
Query the rows that are obtained from the results of an aggregation operation in each group
Setelah mengelompokkan hasil kueri, Anda dapat mengkueri baris-baris dalam setiap kelompok. Metode ini berfungsi serupa dengan fungsi ANY_VALUE(field) di MySQL.
Saat mengkueri baris hasil operasi agregasi dalam setiap kelompok, hasil yang dikembalikan hanya berisi informasi kunci primer jika Search Index berisi bidang Nested, Geopoint, atau Array. Untuk memperoleh bidang lainnya, Anda harus mengkueri tabel data.
-
Parameter
Parameter
Deskripsi
name
Nama unik operasi agregasi. Anda dapat mengkueri hasil operasi agregasi tertentu berdasarkan nama ini.
limit
Jumlah maksimum baris yang dapat dikembalikan untuk setiap kelompok. Secara default, hanya satu baris data yang dikembalikan.
sort
Metode pengurutan yang digunakan untuk mengurutkan data dalam kelompok.
columnsToGet
Bidang yang ingin dikembalikan. Hanya bidang dalam search index yang didukung. Bidang ARRAY, DATE, GEOPOINT, dan NESTED tidak didukung.
Nilai parameter ini sama dengan nilai columnsToGet dalam SearchRequest. Anda hanya perlu menentukan columnsToGet dalam SearchRequest.
-
Contoh
Formulir aplikasi kegiatan sekolah berisi bidang tempat informasi seperti nama siswa, kelas, wali kelas, dan ketua kelas dapat ditentukan. Anda dapat mengelompokkan siswa berdasarkan kelas untuk melihat statistik aplikasi dan informasi properti setiap kelas. Pernyataan SQL yang setara adalah
select className, ANY_VALUE(teacher), ANY_VALUE(monitor), COUNT(*) as number from table GROUP BY className.let searchQuery = { offset: 0, limit: 0, query: { queryType: TableStore.QueryType.MATCH_ALL_QUERY, }, getTotalCount: true, groupBys: { groupBys: [ { name: "group_by_name_xxx", type: TableStore.GroupByType.GROUP_BY_FIELD, body: { fieldName: "className", size: 200, subAggs: { aggs: [ { name: "top_row_name_xxx", type: TableStore.AggregationType.AGG_TOP_ROWS, body: { limit: 1, sort: { sorters: [ { fieldSort: { fieldName: "teacher", order: TableStore.SortOrder.SORT_ORDER_DESC, }, }, ], }, }, }, ], }, }, }, ], }, }; let params = { tableName: tableName, indexName: indexName, searchQuery: searchQuery, columnToGet: { // Specify the columns that you want to return. You can set it to RETURN_SPECIFIED to return specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX }, timeoutMs: 30000, } client.search(params, function (err, data) { if (err) { console.log('search error:', err.toString()); } else { console.log('search success:', data); } });