<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    HTML 解析器
    package com.rain.util;

    import Java.io.FileInputStream;
    import Java.io.FileNotFoundException;
    import Java.io.IOException;
    import Java.io.InputStream;
    import Java.io.InputStreamReader;
    import Java.io.Reader;
    import Java.io.UnsupportedEncodingException;

    import org.apache.lucene.demo.html.HTMLParser;

    public class HTMLDocParser {

     private String htmlPath;
     private HTMLParser htmlParser;
     
     public HTMLDocParser(String htmlPath){
      this.htmlPath=htmlPath;
      initHtmlParser();
     }
     public void initHtmlParser(){
      InputStream inputStream=null;
      try{
       inputStream=new FileInputStream(htmlPath);
      }catch(FileNotFoundException e){
       e.printStackTrace();
      }
      if(null!=inputStream){
       try{
        htmlParser=new HTMLParser(new InputStreamReader(inputStream,"utf-8"));
       }catch(UnsupportedEncodingException e){
        e.printStackTrace();
       }
      }
     }
     public String getTitle(){
      if(null!=htmlParser){
       try{
        return htmlParser.getTitle();
       }catch(IOException e){
        e.printStackTrace();
       }catch(InterruptedException e){
        e.printStackTrace();
       }
      }
      return "";
     }
     public Reader getContent(){
      if(null!=htmlParser){
       try{
        return htmlParser.getReader();
       }catch(IOException e){
        e.printStackTrace();
       }
      }
      return null;
     }
     public String getPath(){
      return this.htmlPath;
     }
    }


    描述搜索結果的結構實體Bean
    package com.rain.search;

    public class SearchResultBean {
        private String htmlPath;
       
        private String htmlTitle;

     public String getHtmlPath() {
      return htmlPath;
     }

     public void setHtmlPath(String htmlPath) {
      this.htmlPath = htmlPath;
     }

     public String getHtmlTitle() {
      return htmlTitle;
     }

     public void setHtmlTitle(String htmlTitle) {
      this.htmlTitle = htmlTitle;
     }
    }


    索引子系統的實現

    package com.rain.index;

    import Java.io.File;
    import Java.io.IOException;
    import Java.io.Reader;

    import org.apache.lucene.analysis.Analyzer;
    import org.apache.lucene.analysis.standard.StandardAnalyzer;
    import org.apache.lucene.document.Document;
    import org.apache.lucene.index.IndexWriter;
    import org.apache.lucene.store.Directory;
    import org.apache.lucene.store.FSDirectory;
    import org.apache.lucene.document.Field;

    import com.rain.util.HTMLDocParser;

    public class IndexManager {
     
     //the directory that stores HTML files
     private final String dataDir="E:\\dataDir";
     
     //the directory that is used to store a Lucene index
     private final String indexDir="E:\\indexDir";
     
     public boolean creatIndex()throws IOException{
      if(true==inIndexExist()){
       return true;
      }
      File dir=new File(dataDir);
      if(!dir.exists()){
       return false;
      }
      File[] htmls=dir.listFiles();
      Directory fsDirectory=FSDirectory.getDirectory(indexDir,true);
      Analyzer analyzer=new StandardAnalyzer();
      IndexWriter indexWriter=new IndexWriter(fsDirectory,analyzer,true);
      for(int i=0;i<htmls.length;i++){
       String htmlPath=htmls[i].getAbsolutePath();
       if(htmlPath.endsWith(".html")||htmlPath.endsWith("htm")){
        addDocument(htmlPath,indexWriter);
       }
      }
      indexWriter.optimize();
      indexWriter.close();
      return true;
     }
     
     public void addDocument(String htmlPath,IndexWriter indexWriter){
      HTMLDocParser htmlParser=new HTMLDocParser(htmlPath);
      String path=htmlParser.getPath();
      String title=htmlParser.getTitle();
      Reader content=htmlParser.getContent();
      
      Document document=new Document();
      document.add(new Field("path",path,Field.Store.YES,Field.Index.NO));
      document.add(new Field("title",title,Field.Store.YES,Field.Index.TOKENIZED));
         document.add(new Field("content",content));
         try{
          indexWriter.addDocument(document);
         }catch(IOException e){
          e.printStackTrace();
         }
     }
     public String getDataDir(){
      return this.dataDir;
     }
     
     public String getIndexDir(){
      return this.indexDir;
     }
     
     public boolean inIndexExist(){
      File directory=new File(indexDir);
      if(0<directory.listFiles().length){
       return true;
      }else{
       return false;
      }
     }
    }


    搜索功能的實現
    package com.rain.search;

    import Java.io.IOException;
    import Java.util.ArrayList;
    import Java.util.List;

    import org.apache.lucene.analysis.Analyzer;
    import org.apache.lucene.analysis.standard.StandardAnalyzer;
    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 com.rain.index.IndexManager;

    public class SearchManager {
     private String searchWord;
     private IndexManager indexManager;
     private Analyzer analyzer;
     
     public SearchManager(String searchWord){
      this.searchWord=searchWord;
      this.indexManager=new IndexManager();
      this.analyzer=new StandardAnalyzer();
     }
     
     /**
         * do search
         */
     public List search(){
      List searchResult=new ArrayList();
      if(false==indexManager.inIndexExist()){
       try{
        if(false==indexManager.creatIndex()){
         return searchResult;
        }
       }catch(IOException e){
        e.printStackTrace();
        return searchResult;
       }
      }
      IndexSearcher indexSearcher=null;
      try{
       indexSearcher=new IndexSearcher(indexManager.getIndexDir());
      }catch(IOException e){
       e.printStackTrace();
      }
      QueryParser queryParser=new QueryParser("content",analyzer);
      Query query=null;
      try{
       query=queryParser.parse(searchWord);
      }catch(ParseException e){
       e.printStackTrace();
      }
      if(null!=query&&null!=indexSearcher){
       try{
        Hits hits=indexSearcher.search(query);
        for(int i=0;i<hits.length();i++){
         SearchResultBean resultBean=new SearchResultBean();
         resultBean.setHtmlPath(hits.doc(i).get("path"));
         resultBean.setHtmlTitle(hits.doc(i).get("title"));
         searchResult.add(resultBean);
        }
       }catch(IOException e){
        e.printStackTrace();
       }
      }
       return searchResult;
     }

    }


    請求管理器的實現

    package com.rain.servlet;

    import Java.io.IOException;
    import Java.util.List;

    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import com.rain.search.SearchManager;

    /**
     * @author zhourui
     * 2007-1-28
     */
    public class SearchController extends HttpServlet {
     private static final long serialVersionUID=1L;
     
     /* (non-Javadoc)
      * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
      */
     @Override
     protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
      // TODO Auto-generated method stub
      String searchWord=arg0.getParameter("searchWord");
      SearchManager searchManager=new SearchManager(searchWord);
      List searchResult=null;
      searchResult=searchManager.search();
      RequestDispatcher dispatcher=arg0.getRequestDispatcher("search.jsp");
      arg0.setAttribute("searchResult",searchResult);
            dispatcher.forward(arg0, arg1);
     }
     
    }




    向Web服務器提交搜索請求
    <form action="SearchController" method="post">
          <table>
            <tr>
              <td colspan="3">
                SearchWord:<input type="text" name="searchWord" id="searchWord" size="40">
                <input id="doSearch" type="submit" value="search">
              </td>
            </tr>
          </table>
        </form>
    顯示搜索結果
     <table class="result">
          <%
            List searchResult=(List)request.getAttribute("searchResult");
            int resultCount=0;
            if(null!=searchResult){
             resultCount=searchResult.size();
            }
            for(int i=0;i<resultCount;i++){
             SearchResultBean resultBean=(SearchResultBean)searchResult.get(i);
             String title=resultBean.getHtmlTitle();
             String path=resultBean.getHtmlPath();
             %>
             <tr>
               <td class="title"><h3><a href="<%=path%>"><%=title%></a></h3></td>
             </tr>
             <%
            }
          %>
        </table>
    posted on 2007-01-29 09:57 周銳 閱讀(836) 評論(0)  編輯  收藏 所屬分類: Lucene
    主站蜘蛛池模板: 日韩精品成人亚洲专区| 亚洲日韩一区二区一无码| 很黄很色很刺激的视频免费| 最新国产精品亚洲| 久久亚洲国产午夜精品理论片| 午夜免费福利在线| 久草视频免费在线观看| 中文字幕手机在线免费看电影| 亚洲中文字幕久久久一区| 久久亚洲精精品中文字幕| 久久乐国产精品亚洲综合| 成人免费无码精品国产电影| 99热在线观看免费| 免费日本一区二区| 成全视成人免费观看在线看 | 污网站免费在线观看| 亚洲av片不卡无码久久| 久久久亚洲裙底偷窥综合| 亚洲av日韩综合一区在线观看| 中文字幕亚洲综合久久菠萝蜜| 日韩精品亚洲专区在线观看| 女人毛片a级大学毛片免费| 波多野结衣在线免费观看| 99久久免费国产香蕉麻豆| 97免费人妻无码视频| 麻豆成人精品国产免费| 国产成人综合久久精品免费| 亚洲精品国产日韩无码AV永久免费网 | 无码天堂va亚洲va在线va| 美女视频黄视大全视频免费的| 四虎精品成人免费视频| GOGOGO高清免费看韩国| 曰批全过程免费视频在线观看无码 | 国产亚洲男人的天堂在线观看| 日本一区二区在线免费观看| 久久国产精品免费一区| 最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影 | 四虎影视久久久免费观看| 全部免费毛片在线播放| 国产精品色午夜免费视频| 亚洲Av无码专区国产乱码DVD|