找到与Lucene匹配的开始和结束

我想从lucene(版本3.0.2 for Java)查询中找到匹配的开始和结束位置。 看起来我应该能够从Highlighter或FastVectorHighligher获取此信息,但这些类似乎只返回一个文本片段,突出显示相关文本。 有没有办法通过荧光笔或ScoreDoc本身获取此信息?

更新:我发现了这个相关的问题: 从Lucene找到搜索命中的位置

但我认为Allasso的答案对我不起作用,因为我的查询是短语,而不是个别条款。

如果我是你,我只需从FastVectorHighlighter中获取代码。 相关代码在FieldTermStack中:

List termSet = fieldQuery.getTermSet(fieldName); VectorHighlightMapper tfv = new VectorHighlightMapper(termSet); reader.GetTermFreqVector(docId, fieldName, tfv); // <-- look at this line string[] terms = tfv.GetTerms(); foreach (String term in terms) { if (!termSet.Contains(term)) continue; int index = tfv.IndexOf(term); TermVectorOffsetInfo[] tvois = tfv.GetOffsets(index); if (tvois == null) return; // just return to make null snippets int[] poss = tfv.GetTermPositions(index); if (poss == null) return; // just return to make null snippets for (int i = 0; i < tvois.Length; i++) termList.AddLast(new TermInfo(term, tvois[i].GetStartOffset(), tvois[i].GetEndOffset(), poss[i])); 

主要的是reader.GetTermFreqVector()。 就像我说的那样,FastVectorHighlighter已经做了一些我想复制的腿部工作,但是如果你愿意的话,GetTermPositions调用应该可以做你需要的一切。