求助:Spring Data Elasticsearch 5.2.6与ES-rest-client8.10嵌套聚合实现
解决Spring Data Elasticsearch 5.2.6 + Elasticsearch 8.10的嵌套聚合问题
针对你的需求,在Elasticsearch 8.x的客户端API中,子聚合需要通过嵌套聚合构建器的aggregation()方法来添加,替代了旧版的subAggregation()。以下是完整的代码实现,可直接替换你的TODO部分:
queryBuilder.withAggregation( AGG_ACTION_ROLE, AggregationBuilders.nested { it.path("actionRoles") // 指定嵌套字段的路径 // 添加terms子聚合 it.aggregation("roleNames", AggregationBuilders.terms { it.field("actionRoles.roleName") it.size(1000) }) } )
代码说明:
- 使用
AggregationBuilders.nested()创建嵌套聚合构建器,通过lambda配置path为actionRoles,完全匹配你在Kibana中验证的嵌套聚合结构。 - 在嵌套聚合的lambda内部,调用
it.aggregation()方法添加terms子聚合:- 第一个参数是子聚合的名称
roleNames,和你目标结构中的名称对应; - 第二个参数是
terms聚合的构建器,配置统计字段为actionRoles.roleName,并设置返回结果的数量为1000。
- 第一个参数是子聚合的名称
这段代码生成的聚合结构与你需求中的JSON完全一致,能够正确统计嵌套字段actionRoles.roleName的词频分布。
内容的提问来源于stack exchange,提问作者John Student
相关产品推荐
相关产品推荐

