夢幻e家人

          java咖啡
          隨筆 - 15, 文章 - 0, 評論 - 11, 引用 - 0
          數(shù)據(jù)加載中……

          Lucene關鍵字高亮顯示

          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 = "因為火燒云總是燃燒著消失在太陽沖下地平線的時刻,然后便是寧靜的自然的天籟,沒有誰會在這樣的時光的鏡片里傷感自語,因為燦爛給人以安靜的舒適感。";
                 Field fieldA = new Field("contents", fileTextA, Field.Store.YES,Field.Index.TOKENIZED);
                 docA.add(fieldA);
           
                 Document docB = new Document();
                 String fileTextB = "因為帶有以傷痕為代價的美麗風景總是讓人不由地惴惴不安,緊接著襲面而來的抑或是病痛抑或是災難,沒有誰會能夠安逸著恬然,因為模糊讓人撕心裂肺地想吶喊。";
                 Field fieldB = new Field("contents", fileTextB, Field.Store.YES,Field.Index.TOKENIZED);
                 docB.add(fieldB);
           
                 Document docC = new Document();
                 String fileTextC = "我喜歡上了一個人孤獨地行游,在夢與海洋的交接地帶熾烈燃燒著。"+
                 "因為,一條孤獨的魚喜歡上了火焰的顏色,真是荒唐地不合邏輯,原因。";
                 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{   // 檢索的方法,并實現(xiàn)高亮顯示
                 searcher = new IndexSearcher(indexPath);
                 QueryParser queryParse = new QueryParser(fieldName, analyzer);     //   構造QueryParser,解析用戶輸入的檢索關鍵字
                 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) +" 條檢索結果如下所示:");
                              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", "因為",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 軒轅 閱讀(871) 評論(0)  編輯  收藏 所屬分類: java全文檢索


          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 文山县| 迁安市| 蛟河市| 嵩明县| 夹江县| 积石山| 鄂温| 拉孜县| 赤峰市| 禹城市| 潼南县| 买车| 精河县| 寿阳县| 新疆| 高邮市| 阳山县| 宜章县| 庆元县| 张家口市| 岱山县| 恭城| 贵港市| 右玉县| 福贡县| 同江市| 岚皋县| 南阳市| 马公市| 德惠市| 惠水县| 河西区| 板桥市| 南阳市| 梧州市| 紫金县| 蓝田县| 高台县| 河东区| 凤山市| 志丹县|