夢幻e家人

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

          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{   // 檢索的方法,并實現高亮顯示
                 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 軒轅 閱讀(866) 評論(0)  編輯  收藏 所屬分類: java全文檢索


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


          網站導航:
           
          主站蜘蛛池模板: 汽车| 湖北省| 长治县| 南京市| 延庆县| 莱阳市| 那曲县| 伊吾县| 临桂县| 星子县| 曲沃县| 阿克苏市| 镇康县| 渭源县| 通山县| 始兴县| 甘南县| 陇南市| 连云港市| 巴里| 古丈县| 壶关县| 兴国县| 滦南县| 上饶市| 波密县| 游戏| 富阳市| 淄博市| 临颍县| 留坝县| 彰化县| 宁夏| 广平县| 江陵县| 乐安县| 辉县市| 公主岭市| 香河县| 凯里市| 安仁县|