Spring data elasticsearch - 新版本中的聚合

问题描述 投票:0回答:1

直到最近,我们一直在 4.1.13 版本中使用 spring-data-elasticsearch 从弹性搜索中进行查询。为了对某些东西进行分组,我们使用了聚合 考虑书籍索引。每本书可以有一个或多个作者 为了按作者计算书籍数量,我们使用TermsAggregationbuilder 来获得此分组,如下所示

SearchSourceBuilder builder = this.getQuery(filter, false);
String aggregationName = "group_by_author_id";

TermsAggregationBuilder aggregationBuilders =
    AggregationBuilders.terms(aggregationName).field("authors");

var query =
    new NativeSearchQueryBuilder()
        .withQuery(builder.query())
        .addAggregation(aggregationBuilders)
        .build();

var result = elasticsearchOperations.search(query, EsBook.class, ALIAS_COORDS);

if (!result.hasAggregations()) {
  throw new IllegalStateException("No aggregations found after query with aggregations!");
}
Terms groupById = result.getAggregations().get(aggregationName);
var buckets = groupById.getBuckets();

Map<Long, Integer> booksCount = new HashMap<>();
buckets.forEach(
    bucket ->
        booksCount.put(
            bucket.getKeyAsNumber().longValue(), Math.toIntExact(bucket.getDocCount())));

return booksCount ;

我们最近升级到 spring-data-elasticsearch 4.4.2 并发现有一些重大变化。 首先 .addAggregations 被替换为 withAggregations

第二与之前不同的是,我似乎无法在查询后直接获取术语和存储桶 result.getAggregations().get(aggregationName); 不再可能,我看到的唯一其他选项是 result.getAggregations().aggregations()。所以我想知道是否有人做过同样的事情。 Elasticsearch 的文档本身太差了。

spring-data-elasticsearch elasticsearch-aggregation
1个回答
1
投票

首先 .addAggregations 被 withAggregations 取代

addAggregation(AbstractAggregationBuilder<?>)
已被弃用,应替换为
withAggregations
。这不是一个重大变化。

SearchHits.getAggregations()
返回值的变化记录在从 4.2 到 4.3 的迁移指南中“从 API 中删除 org.elasticsearch 类。”

因此从 4.3 开始,

result.getAggregations().aggregations()
返回的值与之前
result.getAggregations()
返回的值相同。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.