Elasticsearch实现boolQueryBuilder深拷贝

371 阅读1分钟

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);
    }

代码来自:elasticsearch.cn/question/11…