ES聚合查询桶聚合

ElasticSearch(springBoot):

ElesticsearchTemple(ElasticsearchOperations)聚合查询示例

一、Elasticsearch聚合

1、TermsAggregation聚合(相当于mysql groupBy)

es有很多聚合,这里简单讲一下关键字聚合
TermsAggregationBuilder grade_termsAggregationBuilder = AggregationBuilders.terms(“gradeNumberGroupBy”/* 聚合名称任意*/).field(“gradeNumber/根据那个字段分组与es对应字段相同/”).size(20/设置查询字段最多有多少不同的值,默认是10/);
代码如下(示例):

// 按年级分组,统计每个年级人数
TermsAggregationBuilder grade_termsAggregationBuilder = AggregationBuilders.terms("gradeNumberGroupBy"/* 聚合名称任意*/).field("gradeNumber/*根据那个字段分组与es对应字段相同*/").size(20/*设置查询字段最多有多少不同的值,默认是10*/);
// 按性别分组,统计男女比例
TermsAggregationBuilder sex_termsAggregationBuilder = AggregationBuilders.terms("sex").field("sex");

// 按民族分组,统计个民族比例
TermsAggregationBuilder nationality_termsAggregationBuilder = AggregationBuilders.terms("nationality").field("nationality").size(58);
aggrList.add(nationality_termsAggregationBuilder);


2、聚合内继续聚合

es聚合可内部继续嵌套其他聚合
代码如下(示例):
统计每个年级的男女比例

// 按年级分组,统计每个年级人数
TermsAggregationBuilder grade_termsAggregationBuilder = AggregationBuilders.terms("gradeNumberGroupBy"/* 聚合名称任意*/).field("gradeNumber/*根据那个字段分组与es对应字段相同*/").size(20/*设置查询字段最多有多少不同的值,默认是10*/);
// 按性别分组,统计男女比例
TermsAggregationBuilder sex_termsAggregationBuilder = AggregationBuilders.terms("sex").field("sex");
grade_termsAggregationBuilder.subAggregation(sex_termsAggregationBuilder);

3、执行聚合查询

将之前准备的聚合条件加入nativeSearchQueryBuilder,使用elasticsearchOperations.search执行查询

代码如下(示例):

NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
nativeSearchQueryBuilder.addAggregation(grade_termsAggregationBuilder );
// nativeSearchQueryBuilder.withQuery(boolQueryBuilder); // 添加数据筛选条件,在es基础查询中有介绍,可参考(比如想只查2020年入学的学生,可在这里加bool查询条件)
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();
nativeSearchQuery.setMaxResults(0); // 设置返回文本数,做聚合查询主要是做统计,这里不需要获取具体的哪些记录,故设为0

Aggregations aggregations = this.elasticsearchOperations.search(nativeSearchQuery, Map.class, IndexCoordinates.of("es索引名称")).getAggregations();

aggregations 中包含了聚合结果,层级结构有点复杂,后续需要将聚合结果转换成自己需要的结构,这里就不多讲了。

注意:添加es配置后,elasticsearchOperations自动注入(可参考之前发布的文章)
@Autowired
public ElasticsearchOperations elasticsearchOperations;

总结

ExtendedStatsAggregationBuilder 聚合可以统计出count,min,max,avg,aum,平方和,方差,标准差,……等数据
ES还有许多聚合,感兴趣可以研究一下

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值