Lucene關(guān)鍵字高亮顯示
package searchfileexample;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
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.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
public class MyHighLighterServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GB18030";
private String indexPath = "C:\\index";
private Analyzer analyzer;
private IndexSearcher searcher;
//Initialize global variables
public void init() throws ServletException {
analyzer = new StandardAnalyzer();
}
public void createIndex() throws IOException { // 該方法建立索引
IndexWriter writer = new IndexWriter(indexPath,analyzer,true);
Document docA = new Document();
String fileTextA = "因?yàn)榛馃瓶偸侨紵г谔?yáng)沖下地平線(xiàn)的時(shí)刻,然后便是寧?kù)o的自然的天籟,沒(méi)有誰(shuí)會(huì)在這樣的時(shí)光的鏡片里傷感自語(yǔ),因?yàn)闋N爛給人以安靜的舒適感。";
Field fieldA = new Field("contents", fileTextA, Field.Store.YES,Field.Index.TOKENIZED);
docA.add(fieldA);
Document docB = new Document();
String fileTextB = "因?yàn)閹в幸詡蹫榇鷥r(jià)的美麗風(fēng)景總是讓人不由地惴惴不安,緊接著襲面而來(lái)的抑或是病痛抑或是災(zāi)難,沒(méi)有誰(shuí)會(huì)能夠安逸著恬然,因?yàn)槟:屓怂盒牧逊蔚叵雲(yún)群啊?;
Field fieldB = new Field("contents", fileTextB, Field.Store.YES,Field.Index.TOKENIZED);
docB.add(fieldB);
Document docC = new Document();
String fileTextC = "我喜歡上了一個(gè)人孤獨(dú)地行游,在夢(mèng)與海洋的交接地帶熾烈燃燒著。"+
"因?yàn)椋粭l孤獨(dú)的魚(yú)喜歡上了火焰的顏色,真是荒唐地不合邏輯,原因。";
Field fieldC = new Field("contents", fileTextC, Field.Store.YES,Field.Index.TOKENIZED);
docC.add(fieldC);
writer.addDocument(docA);
writer.addDocument(docB);
writer.addDocument(docC);
writer.optimize();
writer.close();
}
public void search(String fieldName,String keyword,PrintWriter out) throws CorruptIndexException, IOException, ParseException{ // 檢索的方法,并實(shí)現(xiàn)高亮顯示
searcher = new IndexSearcher(indexPath);
QueryParser queryParse = new QueryParser(fieldName, analyzer); // 構(gòu)造QueryParser,解析用戶(hù)輸入的檢索關(guān)鍵字
Query query = queryParse.parse(keyword);
Hits hits = searcher.search(query);
for(int i=0;i<hits.length();i++){
Document doc = hits.doc(i);
String text = doc.get(fieldName);
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");
Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));
highlighter.setTextFragmenter(new SimpleFragmenter(text.length()));
if (text != null) {
TokenStream tokenStream = analyzer.tokenStream(fieldName,new StringReader(text));
String highLightText = highlighter.getBestFragment(tokenStream, text);
System.out.println("★高亮顯示第 "+(i+1) +" 條檢索結(jié)果如下所示:");
out.println(highLightText);
}
}
searcher.close();
}
//Process the HTTP Get request
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>MyHighLighterServlet</title></head>");
out.println("<body bgcolor=\"#ffffff\">");
try {
createIndex();
search("contents", "因?yàn)?,out);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
out.println("</body></html>");
}
//Clean up resources
public void destroy() {
}
}
posted on 2008-08-06 11:22 軒轅 閱讀(866) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): java全文檢索