首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >效率:重用术语Lucene 6

效率:重用术语Lucene 6
EN

Stack Overflow用户
提问于 2017-03-12 22:06:41
回答 1查看 72关注 0票数 0

我想要重用术语对象,而不是在每次调用此方法时创建一个新的对象:

代码语言:javascript
复制
public long getDF(String term) throws Exception {
    return indexReader.docFreq(new Term("content", term));
}

我在文档中读到,我可以使用Term的构造函数来重用它:

代码语言:javascript
复制
public Term(String fld)
Constructs a Term with the given field and empty text. This serves two purposes: 1) reuse of a Term with the same field. 2) pattern for a query.

但是,我不知道下一步是什么,因为术语文档中没有setter,也没有reset()方法。

有什么关于如何实现这一点的提示吗?

EN

回答 1

Stack Overflow用户

发布于 2017-03-14 07:49:07

构建术语的成本很低。您可能不应该过多地担心尝试重用它们。如果你看到了真正的性能问题,你应该运行一个分析器。我猜构造术语并不是真正的问题,尝试像这样重用子句只会使事情复杂化,而没有明显的好处。

也就是说,您可以通过从Term.bytes()获取术语的BytesRef并直接修改底层字节数组来重用它。

代码语言:javascript
复制
String text = "text";
Term term = new Term("field");
BytesRef bytes = term.bytes();
bytes.bytes = new byte[UnicodeUtil.maxUTF8Length(text.length())];
bytes.length = UnicodeUtil.UTF16toUTF8(text, 0, text.length(), bytes.bytes);

请注意,不要更改仍在使用的术语的值。例如,尝试像这样向BooleanQuery添加两个子句当然是行不通的。

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

https://stackoverflow.com/questions/42748362

复制
相关文章

相似问题

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