日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es对分组后结果进行统计_ElasticSearch里面如何分组后根据sum值排序

發布時間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es对分组后结果进行统计_ElasticSearch里面如何分组后根据sum值排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ElasticSearch里面的聚合機制非常靈活和強大,今天我們來看下如何在ElasticSearch里面實現分組后,根據sum值進行排序?類似的數據庫SQL如下:

select id,sum(c1) as c1 , sum(c2) as c2 from table1 group id order by c1 desc, c2 asc

這是一個比較常見的統計需求,在es也能比較輕松的實現,先看看curl的一個實現例子查詢:

GET myindex/_search

{

"size":0,

"aggs": {

"a1": {

"terms": {

"field": "FIELD1",

"size":0,

"order": {"a2": "desc"}

},

"aggs":{

"a2":{

"sum":{

"field":"FIELD2.SUBFIELD"

}

}

}

}

}

}

然后,我們看下,如何在Java Api里面操作:

首先我們看下造的數據

總共三個字段id,count,code都是int類型的

id,count,code

1,3,1

2,4,1

1,5,2

2,7,1

3,11,7

然后,我們可以將上面的數據插入到es里面,具體的插入代碼不在給出,比較簡單,直接通過client.prepareIndex方法插入json即可。

下面看下查詢代碼:

public void groupTest(){

//構建查詢請求體

SearchRequestBuilder search = client.prepareSearch("gv_test").setTypes("gv_test");

//分組字段是id,排序由多個字段排序組成

TermsBuilder tb= AggregationBuilders.terms("id").field("id").order(Terms.Order.compound(

Terms.Order.aggregation("sum_count",false)//先按count,降序排

,

Terms.Order.aggregation("sum_code",true)//如果count相等情況下,使用code的和排序

));

//求和字段1

SumBuilder sb= AggregationBuilders.sum("sum_count").field("count");

//求和字段2

SumBuilder sb_code= AggregationBuilders.sum("sum_code").field("code");

tb.subAggregation(sb);//添加到分組聚合請求中

tb.subAggregation(sb_code);//添加到分組聚合請求中

//將分組聚合請求插入到主請求體重

search.addAggregation(tb);

//發送查詢,獲取聚合結果

Terms tms= search.get().getAggregations().get("id");

//遍歷每一個分組的key

for(Terms.Bucket tbb:tms.getBuckets()){

//獲取count的和

Sum sum= tbb.getAggregations().get("sum_count");

//獲取code的和

Sum sum2=tbb.getAggregations().get("sum_code");

System.out.println(tbb.getKey()+" " + tbb.getDocCount() +" "+sum.getValue()+" "+sum2.getValue());

}

//釋放資源

client.close();

}

最終的結果如下:

id,分組個數,count的和,code和

2 2 11.0 2.0

3 1 11.0 7.0

1 2 8.0 3.0

通過對比,我們可以到到結果是準確的,雖然代碼量比sql多很多,但是ElasticSearch的聚合功能卻是非常的強大和靈活,用來做一些OLAP分析是非常方便的。

有什么問題可以掃碼關注微信公眾號:我是攻城師(woshigcs),在后臺留言咨詢。 技術債不能欠,健康債更不能欠, 求道之路,與君同行。

總結

以上是生活随笔為你收集整理的es对分组后结果进行统计_ElasticSearch里面如何分组后根据sum值排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。