<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
    主站蜘蛛池模板: 一本久到久久亚洲综合| 4399好看日本在线电影免费| 免费乱理伦在线播放| 亚洲熟妇自偷自拍另欧美| 在线观看的免费网站| 亚洲国产av美女网站| 91免费播放人人爽人人快乐| 亚洲人成伊人成综合网久久| 99久久99久久精品免费看蜜桃| 亚洲国产日产无码精品| 久久精品免费一区二区喷潮| 亚洲欧美日韩中文二区| 国产成人aaa在线视频免费观看| 日韩国产欧美亚洲v片| 亚洲国产成人精品女人久久久 | 全部免费毛片免费播放| 五月天婷婷免费视频| 国产gv天堂亚洲国产gv刚刚碰 | 亚洲卡一卡2卡三卡4麻豆| 99久久这里只精品国产免费| 一本色道久久88亚洲精品综合| 成年女人永久免费观看片| 四虎影视久久久免费| 久久夜色精品国产嚕嚕亚洲av| 免费v片在线观看视频网站| 亚洲av永久无码精品天堂久久 | 国产亚洲福利精品一区| 久9久9精品免费观看| 亚洲va在线va天堂va手机| 国产成人免费ā片在线观看| 九九免费久久这里有精品23| 亚洲国产女人aaa毛片在线| 女性无套免费网站在线看| 成人精品综合免费视频| 亚洲国产一区二区三区青草影视| 天天摸夜夜摸成人免费视频| 国产高清视频免费在线观看 | 毛片网站免费在线观看| 在线播放免费人成视频网站| 亚洲精品无码久久毛片波多野吉衣 | 亚洲AV福利天堂一区二区三|