我想从lucene(Version 3.0.2 for Java)查询中找到匹配的开始和结束位置.看起来我应该能够从Highlighter或FastVectorHighligher获取此信息,但这些类似乎只返回一个文本片段,突出显示相关文本.有没有办法通过荧光笔或ScoreDoc本身获取此信息?
更新:我发现了这个相关的问题: 从Lucene找到搜索命中的位置
但我认为Allasso的答案对我不起作用,因为我的查询是短语,而不是个别条款.
如果我是你,我只需要从FastVectorHighlighter获取代码.相关代码在FieldTermStack中:
List<string> 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]));
Run Code Online (Sandbox Code Playgroud)
主要的是reader.GetTermFreqVector().就像我说的那样,FastVectorHighlighter已经完成了一些我要复制的工作,但是如果你愿意的话,GetTermPositions调用应该可以完成你需要的一切.
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |