首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以重用不同术语的lucene查询对象吗?

可以重用不同术语的lucene查询对象吗?
EN

Stack Overflow用户
提问于 2015-09-01 14:25:51
回答 1查看 117关注 0票数 0

使用Lucene5.2.1,我有一个BooleanQuery,它合并了几个术语查询。每次我需要运行查询时,都会使用'new‘操作符重新创建BooleanQuery和所有子术语查询。我想避免调用‘新’和重新创建这么多的查询对象。是否有可能每次只更新术语查询中的术语而不重新创建布尔或术语查询对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-01 18:28:03

不是的。查询的构造成本很低,而且不是为重用而设计的。

可以在某种程度上重用BooleanQuery:

代码语言:javascript
复制
BooleanClause firstClause = boolQuery.clauses.get(0);
//change the first clause to use a different query.
firstClause.setQuery(myNewSubquery);
//Set the BooleanClause.Occur, if you wish
firstClause.setOccur(BooleanClause.Occur.MUST);

当然,您可以像往常一样添加新的子查询,但是没有办法删除子查询。

重用TermQuery是不可能的。您可以获得底层的Term,但不能修改它。大多数查询都有类似的情况。有些,如果你看得足够近,你可以想出修改的方法,大多数是你做不到的。

但是,构造查询不应该是一项昂贵的操作。我相当肯定,即使您能够有效地重用查询,它也不会对性能产生明显的影响。运行查询是一个昂贵的部分,而不是构建它。无论如何,运行查询的第一部分是重写它,这涉及创建一组新的查询,所以即使您可以避免自己构建任何查询,Lucene也会在幕后完成它。

如果您有一个实际的性能问题,您试图修复,我建议剖析,以获得更多的信息,它的实际原因。如果你不这样做,那么不必为那事担心了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32334199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档