Elasticsearch实现boolQueryBuilder深拷贝
背景
项目中有这样一个场景,需要根据选择的不同的条件,查询数据当期,上期的聚合的值,其他搜索条件是不变的。
我们项目中的实现方式的是查询两次es,两次的查询条件除了时间范围之外,其他条件都是相同的。由于我们的查询条件比较复杂,所以每次查询都需要构建一个boolQueryBuilder。查询几个日期范围就要构建几次。所以一直想找一种可以直接复制已经构建好的boolQueryBuilder的方式。最后在Elasticsearch中文社区找到了解决方案。
代码实现
废话不多说,直接上代码。
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);
}