思路不清晰的小伙伴可以先在es中把聚合代码写出来
{
"aggs": {
"brandAgg": {
"terms": {
"field": "brandName.keyword"
},
"aggs": {
"typeAgg": {
"terms": {
"field": "typeTwoName.keyword"
}
},
"ruleAgg": {
"terms": {
"field": "ruleName.keyword"
},
"aggs": {
"ruleValueAgg": {
"terms": {
"field": "ruleAttrValue.keyword"
}
}
}
}
}
}
}
注:字段名称加keyword是精准查询,模糊查询可以去掉
查询完成后这是聚合的结构
pom文件中引入依赖es依赖,在这里就不详细介绍了,首先在java中构建对象
//构建对象
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
在java代码中先把要聚合的名称创建出来
根据刚刚的es代码设置java中的terms名称和field后面的名称相对应
//构建聚合名称
TermsAggregationBuilder brandAgg = AggregationBuilders.terms("brandAgg").field("brandName.keyword");
TermsAggregationBuilder typeAgg = AggregationBuilders.terms("typeAgg").field("typeTwoName.keyword");
TermsAggregationBuilder ruleAgg = AggregationBuilders.terms("ruleAgg").field("ruleName.keyword");
TermsAggregationBuilder ruleValueAgg = AggregationBuilders.terms("ruleValueAgg").field("ruleAttrValue.keyword");
这里是根据es代码中创建的层级关系来依次分配
//根据聚合分配层级
brandAgg.subAggregation(typeAgg);
bra