不要急,总有办法的

BoolQueryBuilder 深拷贝

Elasticsearch | 作者 act | 发布于2021年05月25日 | 阅读数:2338

我想基于原有的BoolQueryBuilder 深拷贝出另外一个 BoolQueryBuilder,在java项目中请问该怎么写呢?目前没有找到合适的方式,持有引用不能满足我目前的需求。求助es builder相关深拷贝的写法。。。
已邀请:

Charele - Cisco4321

赞同来自: act

BoolQueryBuilder里面的元素不多,直接取过来就可以了吧。
 
        BoolQueryBuilder b2 = new BoolQueryBuilder();
         b2.must().addAll(new ArrayList<>(b1.must()));
        b2.mustNot().addAll(new ArrayList<>(b1.mustNot()));
        b2.should().addAll(new ArrayList<>(b1.should()));
        b2.filter().addAll(new ArrayList<>(b1.filter()));
        b2.adjustPureNegative(b1.adjustPureNegative());
        b2.minimumShouldMatch(b1.minimumShouldMatch());

act - 有技术热情

赞同来自:

 public QueryBuilder copyQueryBuilder(QueryBuilder queryBuilder) throws IOException {
SearchModule searchModule = new SearchModule(Settings.EMPTY, false, Collections.emptyList());
XContentParser parser = XContentFactory.xContent(XContentType.JSON).createParser(
new NamedXContentRegistry(searchModule.getNamedXContents()), LoggingDeprecationHandler.INSTANCE, queryBuilder.toString());

return AbstractQueryBuilder.parseInnerQueryBuilder(parser);
}
 
通过看代码,已经找到方式,可以这么搞

要回复问题请先登录注册