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还有许多聚合,感兴趣可以研究一下