我想要重用术语对象,而不是在每次调用此方法时创建一个新的对象:
public long getDF(String term) throws Exception {
return indexReader.docFreq(new Term("content", term));
}我在文档中读到,我可以使用Term的构造函数来重用它:
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()方法。
有什么关于如何实现这一点的提示吗?
发布于 2017-03-14 07:49:07
构建术语的成本很低。您可能不应该过多地担心尝试重用它们。如果你看到了真正的性能问题,你应该运行一个分析器。我猜构造术语并不是真正的问题,尝试像这样重用子句只会使事情复杂化,而没有明显的好处。
也就是说,您可以通过从Term.bytes()获取术语的BytesRef并直接修改底层字节数组来重用它。
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添加两个子句当然是行不通的。
https://stackoverflow.com/questions/42748362
复制相似问题