Spring Data Elasticsearch 4.4.18中AggregationsContainer无get方法求助
Spring Data Elasticsearch 4.4.18 聚合结果获取适配方案
升级到4.4.18版本后,SearchHits.getAggregations()返回的是AggregationsContainer而非旧版的Aggregations,需要先从容器中提取底层聚合实例再处理。以下是修改后的代码:
import org.springframework.data.elasticsearch.core.AggregationsContainer; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.bucket.terms.ParsedLongTerms; import java.util.LinkedHashSet; import java.util.Set; public static Set<Integer> getAggregations(SearchHits<ElasticSearchArticleDto> search, String aggregation) { Set<Integer> result = new LinkedHashSet<>(); AggregationsContainer<? extends Aggregations> aggregationsContainer = search.getAggregations(); if (aggregationsContainer != null) { Aggregations aggregations = aggregationsContainer.getAggregations(); if (aggregations != null && aggregations.get(aggregation) != null) { ((ParsedLongTerms) aggregations.get(aggregation)).getBuckets() .forEach(bucket -> result.add(bucket.getKeyAsNumber().intValue())); } } return result; }
关键修改点:
- 新增
AggregationsContainer类型接收,通过getAggregations()方法获取底层的org.elasticsearch.search.aggregations.Aggregations实例 - 调整空判断逻辑:先校验容器是否非空,再校验内部聚合实例是否非空,最后定位目标聚合项
- 桶遍历、类型转换逻辑与旧版一致,无需额外修改
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

