开发者学堂课程【ElasticSearch 入门精讲:aggregations】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/631/detail/9999
Aggregations
ES 查询详解之 aggregations
根据字段进行分组统计
根据字段分组,统计其他字段的值
size 设置为0,会获取所有数据,否则,只会返回10条。
/**
*聚合查询演示
*/
@Test
public void aggregationsearch() {
//需求:查询 bank 索引库中,所有女性员工数,最年轻的员工的年龄,最低薪水(银行存款余额),以及平均薪水。
//步骤:
//1)检索
SearchResponse response=client.prepareSearch(indices)
.setTypes("account")
//设置检索的条件
.setQuery(QueryBui1ders.termquery("gender.keyword","F"))
//设置聚合操作
//
1
员工数
.addAggregation(new valueCountAggregationBuilder("cntemp",ValueType.LONG).fie1d("account_number"))
//
1
最年轻的(女性)员工的年龄
.addAggregation(new MinAggregationBuilder("minage").field("age"))
//
1
(女性员工)最少银行存款余额
.addAggregation(new Minaggregationbuilder("minBalance").field("balance"))
//
1
(女性员工)平均银行存款余额
.addAggregation(new AvgAggregationbui1der("avgbalance").field("balance"))
//触发检索
.get();
//2)分析检索后的结果
Aggregations aggregations=response.getaggregations():
ValueCount cntEmp=aggregations.get("cntEmp");
Min minAge=aggregations.get("minAge");
Min minBalance=aggregations.get("minbalance");
Avg avgBalance=aggregations.get("avgBalance");
//3)显示结果
//%d,占位符,同时也是格式符,用来格式化整数的;%f:格式化小数:%s:格式化字符串;%n:用来换行
system.out.printf("bank索引库中,所有女性员工数是:%d,最年轻的员工的年龄:%.0f,最低银行存款余额:%.2f,以及平均银行存款余额:%.2f”,cntEmp.getvalue(),minAge.getvalue(),minbalance.getvalue(),avgBalance.getvalue());
}