使用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是一样的。我不太明白是什么造成了这一点。代码有问题吗?
答
我没有在我面前的代码,但我认为你正在得到一个数组的数组。 所以,你需要做的是:
item[] = fragments[0]
fragment = item[0]
或只得到1项出片段阵列。
重复片段实际上是否多次出现在字段内容中?你可以发布示例查询和内容吗? – KenE 2010-06-08 20:30:58
嗨,谢谢你的回复。我发现了这个错误,它在索引创建中导致重复命中。 – 2010-06-14 08:16:29