菜鳥也想玩搜索引擎——JobSearch簡介


  這一篇將簡要介紹一下JobSearch的結構,同時發下源碼,來點干貨,等過兩天閑的時候將圍繞這個程序簡單介紹搜索引擎的各部分,同時談談個人的一些理解。程序寫的比較簡單,基礎好的話很容易就能看懂(因為寫的比較早,所以代碼比較亂,還望各位勿噴啊)。

  SVN地址:http://code.taobao.org/svn//jobsearch/trunk

  源文件下載地址:http://files.cnblogs.com/good-temper/jobsearch.rar

1、程序結構

  程序框架如下:

  

     (1)、爬蟲從招聘網站通過列表頁抓取招聘頁面,將招聘信息解析出后存入數據庫

     (2)、通過Luence實現的索引器存數據庫讀取解析出來的信息,進行分詞並建立索引文件

     (3)、用戶輸入關鍵詞提交給查詢器

     (4)、查詢器將關鍵詞分詞並檢索索引文件,獲得匹配的記錄集合,根據記錄的id查詢數據庫取出數據反饋給用戶。(這里偷了個懶,建立索引是直接將數據表所有字段都存進了索引文件,這樣查詢時就不需要讀取數據庫了,但是這是一個非常糟糕的設計,原因以后詳細分析時會說明)

  程序的源文件結構如下:

//需要說的是部分文件是從更早期的一個爬蟲程序里邊拷貝過來的,原項目是gbk的,而本項目是utf-8的,所以有部分中文注釋亂碼,而且一些文件沒有用到
JobSearch
  com.crawler.action               //這個就不解釋了,struts你懂得
  
com.crawler.analysis              //解析包,本來想用htmlparser,后來覺得挺簡單的就直接自己寫正則了
        ContentAnalysis.java          //內容頁解析類
        ListAnalysis.java            //列表頁解析類
  com.crawler.contraller             //控制包
        Contraller.java             //總控類,所有抓取爬蟲都在此啟動
        job51Contraller.java          //51Job的抓取控制類,主要是啟動多個線程進行抓取,並維護一個鏈接隊列進行任務調度
  com.crawler.database              //數據庫操作
        MysqlOperater.java            //mysql操作類
        SqliteOperater.java            //sqlite的操作類,我自己寫的小程序喜歡用sqlite,輕量級且方便移植。這里本來打算用的,最后因多種原因未使用。
  com.crawler.entity               //實體類,當時百度出的這個單詞......好吧,今天知道人們其實更喜歡寫成model
        Queue.java                //隊列接口
        ArrayQueue.java             //隊列類,為甚么要自己實現?因為當時不知道java已經實現了Queue,就在網上考了一個,當然看了下代碼其實很簡單,使                               用了模板,而且線程安全
        SearchResult.java            //查詢結果類
        SimpleContent.java            //簡單格式的置為內容類,這個......我也忘了當時為啥要定義這個,難道想減少客戶端請求時傳遞的信息量?
        PageContent.java             //頁面內容類,用來存儲頁面解析后的信息
        UrlInfo.java               //Url信息類
 com.crawler.filter                //本來打算實現過濾器的,實現鏈接的濾重,但是最后偷懶直接比對的數據庫,就沒實現。這個之前實現過,采用的Bloom Filter                             實現,之后細講會講到的
 com.crawler.htmlop                //html操作
        GetHtml.java               //請求網路獲取html文件
 com.crawler.io                  //io操作
        FileOperater.java            //主要將html文件保存至本地,這里沒有用到,但是這樣做對於一個真正高校的搜索引擎其實
 com.crawler.luence                //luence操作
        InfoIndex.java              //索引文件操作類,建立、更新、查詢索引都在這里邊,其實包含了索引器和查詢器,這里代碼寫的有點爛。
 com.crawler.tool                 //一些工具類
        ComputeMD5.java              //生成MD5值,最為數據主鍵
        DataOp.java                 //日期格式處理
        PropertiesOp.java             //讀取配置文件屬性,爬蟲的一些信息通過.properties文件配置,包括爬去列表頁起始地址、列表鏈接正則、爬去分類等                                ,這樣做主要是希望增強可拓展性,之后通過添加XXXContraller類和配置文件就能實現對新網站的爬去(這樣其實還是 有缺陷)
//最后,應該是controller,而不是contraller,好吧,沒文化真可怕。

2、如何配置程序

  2.1 導入項目

    可以svn簽入或者下載源文件導入,我用的myeclipse9.0,但是開發用的myeclipse8.5,所以8.5以上版本應該都行。

  2.2   初始化數據庫

    腳本文件在sql文件加下,里邊已經有一些數據,但是建議把數據清空(因為對應沒索引文件沒拷,這些數據也查詢不出來)。

  2.3   抓取數據

    運行程序,將程序部署至tomcat,打開:http://localhost:8080/JobSearch/index.jsp

    點擊右上角的“抓取設置”,按照下圖執行點擊1、2,暫時不要執行3。

    這是可以在控制台看到輸出抓取日志信息:

  2.4  對抓取信息建立索引

    在抓取了一段時間后(可以看看數據庫,差不多positioninfo表有個千吧條信息時,反正是測試下,用不着抓太多),點擊上邊的3開始建立索引。這里需要提到是由於代碼對異常處理的有問題,長時間運行后會出現異常信息,一般情況下忽略即可(比如一些鏈接請求失敗很正常),但是有時候你會發現列表頁解析速度很快,內容頁個很長時間才完成一個,這個一般重啟即可,不必擔心重復抓取,抓取狀態數據庫保存的有。

    建立索引將是個很長的時間,而且建議在抓取停止后在去建立索引(怎么停止?這個....沒寫,直到列表信息抓取完就停止了,或者你重啟下tomcat也行,反正是個練手項目,也不追求十全十美......),否則很可能你等很長時間也不見結束。

  2.5  萬事具備,搜索吧

    打開主頁,填寫關鍵詞(最好和抓取分類相關)和條件,點擊搜索,會驚喜的發現頁面顯示了搜索結果。但是同時你也可能會小小的失望:有時候搜索結果准確度並不是那么高。這個主要和分詞器以及luence的使用有關,因為我只是簡單的使用了下,並未做相關排名,而且分詞器分詞不一定准確(這個牽扯很多原因,也是搜索引擎需要解決的核心問題之一,以后我會說下我所了解的解決思路)。

  最后來幾張效果圖,然后睡覺去。

 

    

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM