You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:32:16