1. 程式人生 > >Nutch+Lucene搜尋引擎開發實踐

Nutch+Lucene搜尋引擎開發實踐

網路拓撲

                                                          

圖 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.