在Lucene文档中获得任期职位的正确方法是什么?

时间:2018-11-22 21:16:36

标签: lucene

The example in this question和其他一些我在网上看到的方法,是使用postings的{​​{1}}方法来获取字词位置。从链接的问题的示例中复制粘贴:

TermVector

此代码对我有用,但令我发疯的是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. } } } 类型是保存位置信息的地方。我所见过的所有文档都说术语向量保持位置数据。但是,这种类型没有任何方法可以获取该信息!

Lucene的旧版本显然具有一种方法,但是至少从Lucene的6.5.1版本开始,情况并非如此。

相反,我应该使用Terms方法来遍历文档,但是我已经知道我要处理哪个文档!

API文档没有任何关于仅返回当前文档(向量属于该文档的文档)的信息,但是当我运行它时,我只会得到当前文档。

这是从项向量中获取位置数据的正确且唯一的方法吗?为什么会有如此不直观的API?是否有文档解释为什么以前的方法对此有所支持?

1 个答案:

答案 0 :(得分:1)

不知道“对与错”,但是对于版本6.6.3来说似乎可行。

pandas