春季数据弹性搜索-新版本中的聚合



直到最近,我们一直在使用4.1.13的弹簧数据弹性搜索来从弹性搜索中进行查询。对于分组,我们使用了聚合考虑一下书籍索引。每本书可以有一位或多位作者为了按作者获得书籍数量,我们使用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 ;

我们最近升级到春季数据弹性搜索4.4.2,发现有一些突破性的变化。首先,addAggregations被替换为Aggregations

第二,与之前不同的是,在查询后,我似乎无法直接获得Terms和bucketresult.getAggregations((.get(aggregationName(已经不可能了,我看到的唯一其他选项是result.getAggregations((.gaggregations(。所以我想知道是否有人也这样做过。文档本身在Elastic搜索中非常糟糕。

首先。addAggregations被withAggregations取代

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

CCD_ 3的返回值的变化记录在从4.2到4.3〃的迁移指南中;从API中删除org.lasticsearch类">

因此,从4.3开始,result.getAggregations().aggregations()返回的内容与之前result.getAggregations()返回的内容相同。

最新更新