[lucene] lucence高亮显示问题
xihuan&java
2009-10-22
我刚接触lucence最近也要用它来开发一个收索引擎,现在在高亮显示上遇到了点麻烦请大家指正,
这是我的源码 package test; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.highlight.Highlighter; import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.SimpleFragmenter; import org.apache.lucene.search.highlight.SimpleHTMLFormatter; public class TestQuery { @SuppressWarnings("deprecation") public static void main(String[] args) throws IOException, ParseException { Hits hits = null; String queryString = "这"; Query query = null; IndexSearcher searcher = new IndexSearcher("c:\\index"); Analyzer analyzer = new StandardAnalyzer(); try { QueryParser qp = new QueryParser("body", analyzer); query = qp.parse(queryString); } catch (ParseException e) { } if (searcher != null) { hits = searcher.search(query); if (hits.length() > 0) { for(int i=0;i<hits.length();i++) { Document doc = hits.doc(i); String text = doc.get("body"); SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<B><font color='green'>", "</font></B>"); Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query)); highlighter.setTextFragmenter(new SimpleFragmenter(400)); String highLightText = queryString; if (text!= null) { TokenStream tokenStream = analyzer.tokenStream(queryString,new StringReader(text)); try { highLightText = highlighter.getBestFragment(tokenStream, text); } catch (InvalidTokenOffsetsException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(highLightText); } System.out.println("*高亮显示第 "+(i+1) +" 条检索结果如下所示:"); System.out.println(queryString); System.out.println(highLightText); System.out.println("找到:" + hits.length() + " 个结果!"); } } } } } |