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

Mik*_*e T 2 java lucene

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

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

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

Xod*_*rap 5

如果我是你,我只需要从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调用应该可以完成你需要的一切.