开发者学堂课程【ElasticSearch 最新快速入门教程:Aggregations】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/642/detail/10662
Aggregations
主要内容
一、聚合操作 ES JavaAPI_aggregation
二、聚合操作演示
一、聚合操作 ES JavaAPI_aggregation
1、aggregation 指的是一些聚合操作,聚合操作就是根据字段进行分组统计;根据字段分组,统计其他字段的值;size 设置为0,会获取所有数据,否则,只会返回10条
//需求:查询 bank 索引库中,所有女性员工数,最年轻的员工的年龄,最低薪水(银行存款余额),以及平均薪水
//步骤:
//1)检索
SearchResponse response = client.preparesearch(indices)
.setTypes("account")
//设置检索的条件
.setQuery(QueryBuilders.termouery("gender.keyword", "F"))
//设置聚合操作
//1员工数
.addAggregation(new ValuecountAggregationBuilder("cntEmp”,
ValueType.LONG).field("account_number"))
讲解:cntEmp 是别名,account_number 是账户号
//2最年轻的(女性)员工的年龄
.addAggregation(new MinAggregationBuilder("minAge").field("age"))
//3(女性员工)最少银行存款余额
.addAggregation(new MinAggregationBuilder("minBalance").field("balance"))
//4 (女性员工)平均银行存款余额
.addAggregation(new AvgAggregationBuilder("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", I
cntEmp.getvalue(), minage.getvalue(), minBalance.getvalue(
),
avgBalance.getValue(
)
);
二、聚合操作演示
1、查询索引库 bank 中的 type 之 account,查询出所有的女性的账户总数,最少银行存款余额,最多银行存款余额,以及平均银行存款余额。
@Test
public vold testAggregation() throws IOException {
//步骤:
//1查询
SearchR
esponse
response= client.prepareSearch
(
…i
ndices :“bank”)
.setTypes("account”)
//所有的女性的账户总数
.addAggregation(new ValueCountAggregationBuilder( name :"cnt”, ValueType.LONG.fleld(“account_ number)
注意:
field 里一般用组建,组建的是账户号 accout_number
//最少银行存款余额
.addAggregation(new MinAggregationBuilder( name :"minBalance”).field(“balance”))
//最多银行存款余额
.addAggregation(new MaxAggregationBuilder( name:"maxBalance").fleld("balance”)
//平均银行存款余额
.addAggregation(new AvgAggregationBullder(name:"avgBalance”).field(“balance”)).
.get();
//2分析结果
Aggregations aggregations = response.getAggregations();
ValueCount vc = aggregations.get("cnt”);
Min minBalance = aggregations.get("minBalance"); Max maxBalance = aggregations.get("maxBalance"); Avg avgBalance = aggregations.get("avgBalance”)
}
System.out.println( “所有的女性的账户总数是:%d%n最少银行存款余额是:%f%n,最多银行存款余额是:%f%n,以及平均银行存款余额是:%f%n”
vc.get value,minBalance.getValue,maxBalance.getvalue,avgBalance.getvalue
(
))
2、执行看一下结果
这个结果既包括男性也包括女性。
3、加一个条件,结果就只包括女性
//1查询
SearchR
esponse
response= client.prepareSearch
(
…i
ndices :“bank”)
.setTypes("account”)
//所有的女性的账户总数
.
setQuery(QueryBuilders.termQuery(name:”gender.keyword,”value:”F”)
再来执行一下