gpt4 book ai didi

elasticsearch - 如何深拷贝elasticsearch QueryBuilder?

转载 作者:行者123 更新时间:2023-12-02 22:14:22 24 4
gpt4 key购买 nike

我有一个用例,我有一个 boolQueryBuilder,它在不同类型的查询中很常见。

现在对于不同的查询,我需要向 boolQueryBuilder 添加不同的 must()

基本上,假设我有一个通用的 boolQueryBuilder,它是用来过滤带有特定标签的书籍的。现在,当我收到选择特定类型 1/类型 2 的请求时,我必须这样做

boolQueryBuilder.must(type1) 用于请求 1boolQueryBuilder.must(type2) 用于 request2(不应该有 type1)

我尝试了 deepcopyserializedeserialize 但它们非常非常慢,大约需要 3 秒

我需要 type1 以及 request1 中的标签,type2 以及 request2 中的标签。

使用我拥有的公共(public)构建器而不是一次又一次地重新构建公共(public)查询的最佳方法是什么?

最佳答案

这不是最有效的解决方案,但实现起来最快,而且不会影响性能。对于真正有效的实现,您可能需要编写一个自定义构建器来创建您的副本。我创建了一个 List<QueryBuilder>并添加了我的 TermQueryBuilderTermsQueryBuilder给它。创建 ListQueryBuilder会支持添加大多数查询。
因为我每次都必须重新使用它来获得 BoolQueryBuilder 的新副本,我只是初始化它并遍历列表以添加查询。

List<QueryBuilder> queryBuilderList = new ArrayList<>();
queryBuilderList.add(QueryBuilders.termQuery(key, value));
queryBuilderList.add(QueryBuilders.termsQuery(key, value));

// Somewhere later
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
for (int i = 0; i < queryBuilderList.size(); i++) {
boolQueryBuilder.must(queryBuilderList.get(i));
}

关于elasticsearch - 如何深拷贝elasticsearch QueryBuilder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com