Spring Boot3迁移:新版Java Elasticsearch客户端中FiltersAggregator.KeyedFilter的替代方案
Spring Boot 3迁移:新版Java Elasticsearch客户端中FiltersAggregator.KeyedFilter的替代方案
在新版Java Elasticsearch客户端(适配Elasticsearch 8.x及Spring Boot 3的版本)中,FiltersAggregator.KeyedFilter已被弃用,替代方案可通过以下两种方式实现带键的过滤器聚合:
方式一:逐个添加带键过滤器
直接使用FiltersAggregationBuilder的addFilter方法,依次传入键名和对应的查询条件:
import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder; import org.elasticsearch.index.query.QueryBuilders; FiltersAggregationBuilder aggregation = FiltersAggregationBuilder.filters("agg") .addFilter("men", QueryBuilders.termQuery("gender", "male")) .addFilter("women", QueryBuilders.termQuery("gender", "female"));
方式二:批量构建带键过滤器
借助Filters.KeyedFilter(新版包路径为org.elasticsearch.search.aggregations.bucket.filter.Filters.KeyedFilter)批量构建过滤器集合,再传入聚合构建器:
import org.elasticsearch.search.aggregations.bucket.filter.Filters; import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder; import org.elasticsearch.index.query.QueryBuilders; Filters filters = new Filters( new Filters.KeyedFilter("men", QueryBuilders.termQuery("gender", "male")), new Filters.KeyedFilter("women", QueryBuilders.termQuery("gender", "female")) ); FiltersAggregationBuilder aggregation = FiltersAggregationBuilder.filters("agg", filters);
核心说明
新版客户端将原FiltersAggregator.KeyedFilter迁移至Filters.KeyedFilter类下,同时调整了AggregationBuilders.filters()的重载逻辑,上述两种写法均能完全替代旧版的聚合配置方式,且更符合新版API的设计规范。
内容的提问来源于stack exchange,提问作者predator
相关产品推荐
相关产品推荐

