Spring Data Elasticsearch 5.x新客户端下如何用NativeQuery实现聚合查询
Spring Data Elasticsearch 5.x 聚合查询(NativeQuery 适配方案)
Spring Data Elasticsearch 5.x 移除了旧的NativeSearchQueryBuilder和NativeSearchQuery,改用NativeQuery作为原生查询的载体,以下是从4.x版本代码迁移到5.x的实现:
迁移后的核心代码
protected <T> SearchHits<T> searchHitsForAggregation(QueryBuilder queryBuilder, AbstractAggregationBuilder<?> aggregationBuilder, Pageable pageable) { NativeQuery.NativeQueryBuilder queryBuilderNative = NativeQuery.builder() .withSearchType(SearchType.DEFAULT) .withQuery(queryBuilder) .withAggregation(aggregationBuilder); // 单个聚合用withAggregation,多个聚合用withAggregations传入集合 if (pageable == null) { queryBuilderNative.withMaxResults(0); // 无需返回文档时设置结果数为0,避免无效数据返回 } else { queryBuilderNative.withPageable(pageable); } NativeQuery nativeQuery = queryBuilderNative.build(); return operations.search(nativeQuery, indexClass(), indexCoordinates()); }
关键变化说明
- 移除
NativeSearchQueryBuilder和NativeSearchQuery,替换为NativeQuery.builder()构建原生查询 - 聚合添加:单个聚合调用
withAggregation()方法,多个聚合可传入集合调用withAggregations(Collection<? extends AggregationBuilder>) - 适配新客户端:5.x默认适配
ElasticsearchClient(替代原RestHighLevelClient),升级依赖版本后无需额外修改客户端配置 - 聚合结果解析逻辑不变:仍通过
SearchHits.getAggregations()获取聚合结果,原有解析代码可直接复用
内容的提问来源于stack exchange,提问作者user352290
相关产品推荐
相关产品推荐

