2010-06-08 73 views
1

我爲我的應用程序使用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

回答

-1

我沒有在我面前的代碼,但我認爲你正在得到一個數組的數組。 所以,你需要做的是:

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

或只得到1項出片段陣列。