Nutch部署及相關問題(中文亂碼等)修正

來源:互聯網
上載者:User

 Nutch介紹
Nutch是一個開源的WEB搜尋引擎,能提供高品質的搜尋服務。
對於一些內部系統或中小型網站來說是一個不錯的全文檢索搜尋解決方案。 
Nutch的部署
最新版本的Nutch可從Nutch的官網擷取。下載後直接解壓就可以進行使用。 由於我使用的是windows系統,這裡以windows下部署進行介紹。 
Nutch爬蟲設定
Nutch本身包含一個對目標網站進行索引的爬蟲和一個提供搜尋用的web介面。在查詢介面可以使用前需要先設定Nutch爬蟲對目標網站進行抓取。
部分設定檔的解釋: 

  • nutch\conf\nutch-default.xml 
  • 設定http.agent.name,如果http.agent.name為空白,爬蟲將無法正常啟動。這裡可以設定任意你喜歡的名字,比如設定為vik-robot。 
  • indexer.mergeFactor/indexer.minMergeDocs這兩個值都改成500。這兩個參數值越大,效能越高,所需要花費的記憶體也需要相應的增加。如果設定過大,可能出現記憶體溢出。就實際使用方式,在當前參數下,記憶體的最大使用量為3xxM。 
  • http.timeout表示最大逾時等待時間,如果訪問的串連長時間沒有反應將丟棄。 
  • db.max.outlinks.per.page該參數表示單個頁面最多支援多少個外連的串連,如果過多將不抓取。 如果是自己的內部系統那就設定一個任意大的數吧。 
  • nutch-default.xml 解讀
  • 建立檔案nutch\urls,並填入爬蟲的起始url。比如:
    http://mysite.com/
  • nutch\conf\crawl-urlfilter.txt 該檔案用於設定需要索引的url的過濾關係。每行一個過濾條件,-表示不包含該url,+表示包含。 
  • [?*!@=],該行表示對所有動態url都不抓取。 現在的大部分系統都會有很多動態url,該過濾條件很可能使你抓不到任何內容。 
  • 針對各系統分別設定url的過濾關係。具體的設定方法得根據各自應用系統的不同而不同,這裡以廣為流行的論壇discuz為例。在這url過濾將只抓取板塊列表和文章內容。
    # skip file:, ftp:, & mailto: urls
    -^(file|ftp|mailto):
    # skip image and other suffixes we can't yet parse
    -\.(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|exe|jpeg|JPEG|bmp|BMP)$
    # skip URLs containing certain characters as probable queries, etc.
    #-[?*!@=]
    # skip URLs with slash-delimited segment that repeats 3+ times, to break loops
    -.*(/.+?)/.*?\1/.*?\1/
    # accept hosts in MY.DOMAIN.NAME
    #+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
    #discuz
    +^http://mysite.com/discuz/index.php$
    +^http://mysite.com/discuz/forumdisplay.php\?fid=\d+$
    +^http://mysite.com/discuz/forumdisplay.php\?fid=\d+&page=\d+$
    +^http://mysite.com/discuz/viewthread.php\?tid=\d+&extra=page%3D\d+$
    +^http://mysite.com/discuz/viewthread.php\?tid=\d+&extra=page%3D\d+&page=\d+$
    # skip everything else
    -.
  • nutch\conf\regex-urlfilter.txt 我不清楚該設定檔是否有起作用,但建議注釋掉其中的,-[?*!@=]。 
  • 執行爬蟲

  • 由於Nutch的指令碼採用的是linux下是shell,在windows下需要使用cygwin來執行。至於cygwin的具體使用...,這個到網上找其他文章吧。cygwin官網
  • 進入Nutch目錄後執行命令 sh bin/nutch crawl urls -dir crawl -threads 2 -depth 100 -topN 1000000 >& crawl.log 完成網站的抓取和索引。 
  • threads 抓取網頁的線程數,理論上線程數越多速度越快,但過多的線程會給伺服器帶來比較大的負擔,影響正常使用。 
  • depth 頁面的抓取深度。 
  • topN 每層最多抓取的頁面數 
  • crawl.log 日誌存放檔案 
  • 執行後會在Nutch的根目錄下產生一個crawl目錄,裡面存放的就是索引檔案。 
  • 注意:執行命令前請先刪除已存在的crawl檔案夾。如果crawl檔案已經存在,命令將無法正常執行。 
  • windows定時任務的建立
    Nutch的索引建立好後並不會自動更新,需要使用windows的計劃任務建立計劃任務來定期更新索引。 
  • 具體做法待續
  • WEB搜尋介面的部署
    Nutch使用Java開發,其WEB介面需要跑在相應的web容器中,這裡採用的是tomcat6。 
    部署到tomcat

  1. 複製nutch-0.9.war到tomcat6\webapps,運行tomcat6\bin\startup.bat啟動tomcat。 
  2. tomcat將自動對war檔案進行解壓。修改檔案tomcat6\webapps\nutch\WEB-INF\classes\nutch-site.xml,設定nutch的索引檔案位置。
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
    <name>searcher.dir</name>
    <value>D:\AppServ\nutch\crawl\</value>
    </property>
    </configuration>
  3. 重啟tomcat並測試搜素功能,如果沒有意外,服務將正常運行。 

相關問題修正

  • 搜尋網頁面上的部分中文出現亂碼。該問題主要由jsp:include引起。將被包含檔案nutch\zh\include\header.html由UTF-8轉換為GBK,修正該問題。 
  • 搜尋中文出現亂碼。修改tomcat設定檔tomcat6\conf\server.xml。增加URIEncoding/useBodyEncodingForURI兩項。
    <Connector port="8080" protocol="HTTP/1.1" 
    connectionTimeout="20000" 
    redirectPort="8443" 
    URIEncoding="UTF-8" 
    useBodyEncodingForURI="true"/>
  • 網頁快照亂碼問題修正。修改頁面tomcat6\webapps\nutch\cached.jsp,將content = new String(bean.getContent(details))修改為content = new String(bean.getContent(details),"utf-8")。 
  • apache整合。修改apache設定檔\conf\httpd.conf,增加如下配置
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    <IfModule mod_proxy.c>
    ProxyPass /nutch http://localhost:8080/nutch
    ProxyPassReverse /nutch http://localhost:8080/nutch
    </IfModule> 
  • url問題。在和apache整合後會出現url不正確的問題。主要表現為使用者看到的url的首碼為ProxyPass中配置的url。目前還沒有比較好的解決方案,只能手動修改所有問題jsp頁面。使用命令findstr /s requestURI *.jsp尋找出所有問題頁面。在String base = requestURI.substring(0, requestURI.lastIndexOf('/'));後面增加base = base.replace("localhost:8080", "mysite.com");,將錯誤的url替換為正確的url地址。 
  • 刪除頁面tomcat6\webapps\nutch\cached.jsp,關閉網頁快照功能。由於部分頁面,目前使用者可能無存取權限,關閉快照功能。 
  • 中文問題修改
    Nutch預設支援中文搜尋,只是Nutch對中文採用安字進行分詞,例如搜尋“中國”不使用雙引號,將返回所有包含“中”和“國”的網頁。為方便使用,系統自動為搜尋內容添加雙引號。 
  • 修改檔案tomcat6\webapps\nutch\search.jsp。增加格式化搜尋字元的函數,同時對queryString進行處理。
    <%! 
    public static String format_query_str(String s) {
    s = s.replace("”", "\"").replace("“", "\"");// 處理中文符號
    if (s.indexOf("\"") > -1) {// 如果包含"則不繼續進行處理
    return s;
    }
    String[] ss = s.split(" ");
    String ret_s = "";
    for (String str : ss) {
    if (str.trim().equals("")) {
    continue;
    }
    if (str.indexOf("-") == 0) {
    str = "-\"" + str.substring(1) + "\"";
    } else {
    str = "\"" + str + "\"";
    }
    ret_s += str + " ";
    }
    return ret_s.trim();
    }
    %>
    queryString = format_query_str(queryString);
  • 搜尋協助

  • 使用方法和常見的搜尋引擎類似,支援多關鍵字,多個關鍵字之間使用空格進行分割。 
  • 對中文採用安字進行分詞,因此對中文搜尋時最好加上雙引號。例如搜尋“中國”如果不使用雙引號,將返回所有包含“中”和“國”的網頁。 
  • 可以在一個詞前面加減號叢而禁止它出現在搜尋結果中, 例如, 搜尋football -nfl 會找到討論football, 但不出現"nfl"的網頁。 
  • 搜尋英文單詞不區分大小寫, 因此搜尋NuTcH 等同於搜尋 nUtCh。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.