【发布时间】:2018-11-22 21:16:36
【问题描述】:
The example in this question 和我在网上看到的其他一些使用TermVector 的postings 方法来获取术语位置。从链接问题的示例中复制粘贴:
IndexReader ir = obtainIndexReader();
Terms tv = ir.getTermVector( doc, field );
TermsEnum terms = tv.iterator();
PostingsEnum p = null;
while( terms.next() != null ) {
p = terms.postings( p, PostingsEnum.ALL );
while( p.nextDoc() != PostingsEnum.NO_MORE_DOCS ) {
int freq = p.freq();
for( int i = 0; i < freq; i++ ) {
int pos = p.nextPosition(); // Always returns -1!!!
BytesRef data = p.getPayload();
doStuff( freq, pos, data ); // Fails miserably, of course.
}
}
}
这段代码对我有用,但让我抓狂的是Terms 类型是保存位置信息的地方。我看到的所有文档都在说术语向量保留位置数据。但是,此类型没有获取该信息的方法!
旧版本的 Lucene 显然有一个方法,但至少从 Lucene 6.5.1 版本开始,情况并非如此。
我应该使用postings 方法并遍历文档,但我已经知道要处理哪个文档!
API 文档没有说明只返回当前文档(术语向量所属的文档)的帖子,但是当我运行它时,我只得到当前文档。
这是从术语向量中获取位置数据的正确且唯一的方法吗?为什么会有这么不直观的 API?是否有文件解释了为什么以前的方法改为支持这一点?
【问题讨论】:
标签: lucene