Nutch+Lucene搜尋引擎開發實踐

來源:互聯網
上載者:User

標籤:lucene   nutch   搜尋引擎   

網路拓撲

                                                          

圖 1 網路拓撲圖

安裝Java JDK

首先查看系統是否已經安裝了其他版本的JDK,如果有,先要把其他版本的JDK卸載。

 

用root使用者登入系統。

# rpm-qa|grep gcj

 

顯示內容其中包含下面兩行資訊

# java-1.6.0-openjdk-1.6.0.0-1.57.1.11.9.el6_4.i686

#java-1.7.0-openjdk-1.7.0.9-2.3.8.0.el6_4.i686
卸載
#yum -y remove java-1.6.0-openjdk
#yum -y remove java-1.7.0-openjdk

 

去官網http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下載 jdk-7u60-linux-i586.tar.gz。

在/usr目錄下建立java目錄。

#mkdir java

把jdk-7u60-linux-i586.tar.gz解壓到/usr/java。

#tar-zvxf jdk-7u60-linux-i586.tar.gz -C /usr/java

 

添加環境變數:

# vi /etc/profile     

進入插入模式,在最後一行添加

JAVA_HOME=/usr/java/jdk1.7.0_60

export JAVA_HOME

PATH=$JAVA_HOME/bin:$PATH

export PATH

CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

export CLASSPATH

wq儲存退出。

 

輸入命令
#source /etc/profile

使環境變數在當前ssh用戶端生效。

 

測試:

#echo $JAVA_HOME   測試環境變數配置是否生效

#java -version     查看java版本資訊

#java

#javac             如果這兩個命令都能列印出資訊,說明安裝成功了。

 

部署tomcat

到官網http://tomcat.apache.org/download-70.cgi ,下載apache-tomcat-7.0.54.tar.gz。

 

把apache-tomcat-7.0.54.tar.gz解壓到/usr/local。

#  tar zxvf apache-tomcat-7.0.54.tar.gz  -C/usr/local

#  cd /usr/local/

#  mv apache-tomcat-7.0.54  tomcat

 

這時,還不能從外部存取tomcat,需要在linux預設防護牆上開啟8080連接埠。

#vi /etc/sysconfig/iptables

進入插入模式,添加

-AINPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

wq儲存退出。

 

重新啟動防火牆。

#service iptables restart

 

啟動tomcat 。

# /usr/local/tomcat/bin/startup.sh 

在使用者端瀏覽器中輸入http://10.1.1.95:8080/,可以看到Tomcat歡迎介面!說明部署成功。

 

部署Nutch

由於我們不需要在分布式環境下部署Nutch,我們選用較早版本的nutch-0.9。下載nutch-0.9.tar.gz,解壓到/usr/local。

#  tar zxvf nutch-0.9.tar.gz  -C /usr/local

 

部署nutch搜尋網頁面:

把/usr/local/tomcat/webapps/ROOT檔案夾重新命名為ROOT_BACK。

#cd/usr/local/tomcat/webapps/

#mvROOT ROOT_BACK

 

複製nutch根目錄下的nutch-0.9.war到/usr/local/tomcat/webapps/。

#cp/usr/local/nutch-0.9/nutch-0.9.war /usr/local/tomcat/webapps/

 

啟動tomcat。

#/usr/local/tomcat/bin/startup.sh

 

Tomcat成功啟動後,我們發現/usr/local/tomcat/webapps/檔案夾下多了一個nutch-0.9的檔案夾。把nutch-0.9重新命名為ROOT。

#mvnutch-0.9 ROOT

 

重新啟動tomcat。

#/usr/local/tomcat/bin/shutdown.sh

#/usr/local/tomcat/bin/startup.sh

在使用者端瀏覽器中訪問http://10.1.1.95:8080/。得到結果頁面 1所示。說明搜尋網頁面部署成功。


圖 2 Nutch預設搜尋入口頁

 

資料抓取和內容檢索

進入nutch根目錄。

#cd/usr/local/nutch-0.9

建立檔案multiurls.txt。

#vimultiurls.txt

輸入

http://sports.sina.com.cn/

http://sports.sohu.com/

http://sports.qq.com/

http://sports.cntv.cn/

http://sports.ifeng.com/

http://sports.163.com/

http://sports.uusee.com/

http://www.titan24.com/

wq儲存退出。

 

修改craw-urlfilter.txt,允許下載任意網站。

#vi /usr/local/ nutch-0.9/conf/craw-urlfilter.txt

把原有的過濾過則注釋掉,改為接受任意的url。

# accept hosts in MY.DOMAIN.NAME

##+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/

+^

wq儲存退出。

 

進入nutch目錄,啟動下載任務。

#cd /usr/local/nutch-0.9

#bin/nutch crawl multiurls.txt –dirsports –depth 10 –topN 100 –threads 16

參數含義說明如下:

-dir 指定存放爬行結果的目錄,本次抓取結果資料存放到sports目錄中;

-depth 表明需要抓取的頁面深度,本次抓取深度為10層;

-topN 表明只抓取前N個url,本次抓取為取每一層的前100個頁面;

-threads 指定Crawl採取下載的線程數,本次指定16個線程進行下載。

下載任務開始執行, 2。等待5分鐘左右,下載任務執行完畢, 3。


圖 3 啟動下載任務


圖 4 下載任務結束

根據下載過程可以看出nutch爬取網頁並建立索引庫的過程如下:

1)        插入器(Injector)向網頁資料庫添加起始根URL;

2)        按照要求抓取的層數,用產生器(Generator)產生待下載任務;

3)        調用擷取器(Fetcher),按照指定線程數實際下載相應頁面;

4)        調用頁面分析器(ParseSegment),分析下載內容;

5)        調用網頁資料庫管理工具(CrawlDb),把二級連結添加到庫中等待下載;

6)        調用連結分析工具(LinkDb),建立反向連結;

7)        調用索引器(Indexer),利用網頁資料庫、連結資料庫和具體下載的頁面內容,建立當前資料索引;

8)        調用重複資料刪除器(DeleteDuplicates),重複資料刪除資料;

9)        調用索引合并器(IndexMerger),把資料合併到曆史索引庫中。

 

修改nutch目錄下的nutch-site.xml檔案,增加索引目錄屬性指定檢索器讀取資料的目錄。

#vi/usr/local/nutch-0.9/conf/nutch-site.xml

在<configuration></configuration>之間添加

<property>

<name>http.agent.name</name>

<value>sports.com</value>

<description>sports.com</description>

</property>

<property>

<name>searcher.dir</name>

<value>/usr/local/nutch-0.9/sports</value>

<description></description>

</property>

wq儲存退出。

 

在終端命令視窗下測試檢索。

#cd/usr/local/nutch-0.9

#bin/nutchorg.apache.nutch.searcher.NutchBean 巴西

檢索結果 5所示,共找到213條相關結果。

 

使用Readdb工具摘要描述

#bin/nutch readdb sports/crawldb –stats

得到摘要資訊 6所示,共有15917條連結,成功下載了601個頁面。

 

經過上面步驟,搜尋引擎的檢索準備工作已經完成了。接下來把檢索結果部署到tomcat伺服器,使使用者可以在瀏覽器中檢索。過程如下:

修改tomcat/webapps/ROOT/WEB-INF/classes檔案夾下的nutch-site.xml檔案,指定檢索路徑屬性參數值。

#vi/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/nutch-site.xml

在<configuration></configuration>之間添加

<property>

<name>http.agent.name</name>

<value>sports.com</value>

<description>sports.com</description>

</property>

<property>

<name>searcher.dir</name>

<value>/usr/local/nutch-0.9/sports</value>

<description></description>

</property>

重新啟動tomcat(如果未啟動則直接啟動)。

#/usr/local/tomcat/bin/shutdown.sh

#/usr/local/tomcat/bin/startup.sh

                                           

圖 5 在終端命令視窗下執行檢索命令

                                           

圖 6 使用Readdb擷取摘要描述

 

在使用者端瀏覽器中訪問http://10.1.1.95:8080/。檢索“世界盃”,報錯:Attributevalue is quoted with " which must be escaped when used within the value。是因為tomcat版本升級後(6.0以上),對雙引號的處理機制引起的,如果出現雙引號包含雙引號的情況,就可能會出現這個錯誤。解決辦法是修改conf/catalina.properties檔案。

#vi/usr/local/tomcat/conf/catalina.properties

在最後添加

org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false

wq儲存退出。

再次檢索,出現中文亂碼,解決辦法是修改conf/server.xml檔案。

#vi/usr/local/tomcat/conf/server.xml

找到Connector標籤,添加屬性URIEncoding="UTF-8"。

wq儲存退出。

重新啟動tomcat,就可以在使用者端進行搜尋了。檢索“巴西 世界盃”,得到結果 7所示。

     

圖 7 在使用者端搜尋的結果

參考文獻

[1].    王學松,Lucene+Nutch搜尋引擎開發,人民郵電出版社,2008.

[2].    http://www.coreservlets.com/Apache-Tomcat-Tutorial/

[3].    http://wiki.apache.org/nutch/NutchTutorial

Nutch+Lucene搜尋引擎開發實踐

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.