[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() + " 个结果!");  
}  
}  
}
}


Global site tag (gtag.js) - Google Analytics