如何用Elasticsearch Java API从JSON字符串构建聚合
解决方案
在Elasticsearch 7.7.0的Rest High Level Client中,你可以使用AggregationBuilders.wrapperAggregation()方法直接将聚合JSON字符串转换为聚合构建器,再添加到SearchSourceBuilder中。
实现步骤
- 用
AggregationBuilders.wrapperAggregation()包装聚合JSON字符串,生成WrapperAggregationBuilder实例 - 通过
SearchSourceBuilder的addAggregation()或aggregation()方法将聚合构建器加入查询配置
修改后的完整代码
SearchSourceBuilder searchSourceBuilder(String queryJson, String aggJson) { // 构建查询部分 var queryBuilder = QueryBuilders.wrapperQuery(queryJson); // 构建聚合部分 var wrapperAggBuilder = AggregationBuilders.wrapperAggregation(aggJson); var builder = new SearchSourceBuilder(); builder.query(queryBuilder); builder.addAggregation(wrapperAggBuilder); return builder; }
注意事项
- 确保聚合JSON格式合法:你提供的示例中
prices_range_200_240_avg的聚合类型写错了,应该是avg而非sum,修正后的聚合JSON如下:
{ "prices_range_200_240_sum": { "sum": { "field": "currentListPrice" } }, "prices_range_200_240_avg": { "avg": { "field": "currentListPrice" } } }
- 该方法支持直接传入包含多个聚合的完整JSON对象,无需拆分单个聚合逻辑
内容的提问来源于stack exchange,提问作者Dharmendra Singh
相关产品推荐
相关产品推荐

