对于平时的group by 我们都知道使用 AggregationBuilder 可以解决
AggregationBuilder aggregationBuilder =
AggregationBuilders.terms("nameAgg").field("name.keyword").size(Integer.MAX_VALUE) //1
.subAggregation(AggregationBuilders.terms("jobAgg").field("job.keyword").size(Integer.MAX_VALUE) //2
.subAggregation(AggregationBuilders.avg("ageAgg").field("age")) //3
.subAggregation(AggregationBuilders.count("totalNum").field("name.keyword"))); //4
searchSourceBuilder.aggregation(aggregationBuilder);
以上代码的解释如下
(1) 首先按照name分组,terms括号里面是聚合名字,随便起,field为聚合的字段名;之所以加了.keyword是因为不加聚合的时候会报fielddata属性没有设置为true;
{
"error": {
"root_cause": [{
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default.Set fielddata =

本文详细介绍了如何在Elasticsearch中使用AggregationBuilder进行group by操作,特别是如何创建子查询和PipelineAggregatorBuilders进行复杂的数据聚合。通过示例代码,解析了每个步骤的作用,包括按照name和job字段分组,计算分组内的平均年龄,并讨论了在分组基础上进行子查询的重要性。
1919

被折叠的 条评论
为什么被折叠?



