使用Lucene荧光笔的问题

问题描述:

我为我的应用程序使用Lucene荧光笔2.4.1。我使用荧光笔来获得最佳匹配片段,并显示它们。 我调用函数String [] getFragmentsWithHighlightedTerms(分析器分析器,查询查询,字符串fieldName,字符串fieldContents,int fragmentsNumber,int fragmentSize)。例如:使用Lucene荧光笔的问题

String text = doc.get("MetaData"); 
getFragmentsWithHighlightedTerms(analyzer, query, "MetaData", Text, 5, 100); 

函数getFragmentsWithHighlightedTerms()被定义如下

private static String[] getFragmentsWithHighlightedTerms(argument list here) 
{ 
    TokenStream stream = TokenSources.getTokenStream(fieldName, fieldContents, analyzer); 
    SpanScorer scorer = new SpanScorer(query, fieldName, new CachingTokenFilter(stream)); 
    Fragmenter fragmenter = new SimpleSpanFragmenter(scorer, fragmentSize); 

    Highlighter highlighter = new Highlighter(scorer); 
    highlighter.setTextFragmenter(fragmenter); 
    highlighter.setMaxDocCharsToAnalyze(Integer.MAX_VALUE); 

    String[] fragments = highlighter.getBestFragments(stream, fieldContents, fragmentNumber); 

    return fragments; 
} 

现在我的麻烦的是,highlighter.getBestFragments()方法返回重复。即如果我显示前5个片段,不。 1和3是一样的。我不太明白是什么造成了这一点。代码有问题吗?

+0

重复片段实际上是否多次出现在字段内容中?你可以发布示例查询和内容吗? – KenE 2010-06-08 20:30:58

+1

嗨,谢谢你的回复。我发现了这个错误,它在索引创建中导致重复命中。 – 2010-06-14 08:16:29

我没有在我面前的代码,但我认为你正在得到一个数组的数组。 所以,你需要做的是:

item[] = fragments[0] 
fragment = item[0] 

或只得到1项出片段阵列。