Nutch vs Lucene
Lucene 不是完整的應(yīng)用程序,而是一個用于實現(xiàn)全文檢索的軟件庫。
Nutch 是一個應(yīng)用程序,可以以 Lucene 為基礎(chǔ)實現(xiàn)搜索引擎應(yīng)用。
Nutch vs GRUB
GRUB 是一個分布式搜索引擎(參考)。用戶只能得到客戶端工具(只有客戶端是開源的),其目的在于利用用戶的資源建立集中式的搜索引擎。
Nutch 是開源的,可以建立自己內(nèi)部網(wǎng)的搜索引擎,也可以針對整個網(wǎng)絡(luò)建立搜索引擎。自由(Free)而免費(Free)。
Nutch vs Larbin
"Larbin只是一個爬蟲,也就是說larbin只抓取網(wǎng)頁,至于如何parse的事情則由用戶自己完成。另外,如何存儲到數(shù)據(jù)庫以及建立索引的事情 larbin也不提供。[引自這里]
Nutch 則還可以存儲到數(shù)據(jù)庫并建立索引。
[引自這里]
Nutch 的早期版本不支持中文搜索,而最新的版本(2004-Aug-04 發(fā)布了 0.5)已經(jīng)做了很大的改進。相對先前的 0.4 版本,有 20 多項的改進,結(jié)構(gòu)上也更具備擴展性。0.5 版經(jīng)過測試,對中文搜索支持的也很好。
下面是我的測試過程。
前提條件(這里L(fēng)inux 為例,如果是 Windows 參見手冊):
- Java 1.4.x 。因為我的系統(tǒng)上安裝的Oracle 10g 已經(jīng)有 Java 了。設(shè)定環(huán)境變量:NUTCH_JAVA_HOME 。
[root@fc3 ~]# export NUTCH_JAVA_HOME=/u01/app/oracle/product/10.1.0/db_1/jdk/jre
- Tomcat 4.x 。從這里下載。
- 足夠的磁盤空間。我預(yù)留了 4G 的空間。
首先下載最新的穩(wěn)定版:
[root@fc3 ~]# wget http://www./release/nutch-0.5.tar.gz
解壓縮:
[root@fc3 ~]# tar -zxvf nutch-0.5.tar.gz
......
[root@fc3 ~]# mv nutch-0.5 nutch
測試一下 nutch 命令:
[root@fc3 nutch]# bin/nutch
Usage: nutch COMMAND
where COMMAND is one of:
crawl one-step crawler for intranets
admin database administration, including creation
inject inject new urls into the database
generate generate new segments to fetch
fetchlist print the fetchlist of a segment
fetch fetch a segment‘s pages
dump dump a segment‘s pages
index run the indexer on a segment‘s fetcher output
merge merge several segment indexes
dedup remove duplicates from a set of segment indexes
updatedb update database from a segment‘s fetcher output
mergesegs merge multiple segments into a single segment
readdb examine arbitrary fields of the database
analyze adjust database link-analysis scoring
server run a search server
or
CLASSNAME run the class named CLASSNAME
Most commands print help when invoked w/o parameters.
[root@fc3 nutch]#
Nutch 的爬蟲有兩種方式
- 爬行企業(yè)內(nèi)部網(wǎng)(Intranet crawling)。針對少數(shù)網(wǎng)站進行。用 crawl 命令。
- 爬行整個互聯(lián)網(wǎng)。 使用低層的 inject, generate, fetch 和 updatedb 命令。具有更強的可控制性。
以本站(http://www.)為例,先進行一下針對企業(yè)內(nèi)部網(wǎng)的測試。
在 nutch 目錄中創(chuàng)建一個包含該網(wǎng)站頂級網(wǎng)址的文件 urls ,包含如下內(nèi)容:
http://www./
然后編輯conf/crawl-urlfilter.txt 文件,設(shè)定過濾信息,我這里只修改了MY.DOMAIN.NAME:
# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*/
運行如下命令開始抓取分析網(wǎng)站內(nèi)容:
[root@fc3 nutch]# bin/nutch crawl urls -dir crawl.demo -depth 2 -threads 4 >& crawl.log
depth 參數(shù)指爬行的深度,這里處于測試的目的,選擇深度為 2 ;
threads 參數(shù)指定并發(fā)的進程 這是設(shè)定為 4 ;
在該命令運行的過程中,可以從 crawl.log 中查看 nutch 的行為以及過程:
......
050102 200336 loading file:/u01/nutch/conf/nutch-site.xml
050102 200336 crawl started in: crawl.demo
050102 200336 rootUrlFile = urls
050102 200336 threads = 4
050102 200336 depth = 2
050102 200336 Created webdb at crawl.demo/db
......
050102 200336 loading file:/u01/nutch/conf/nutch-site.xml
050102 200336 crawl started in: crawl.demo
050102 200336 rootUrlFile = urls
050102 200336 threads = 4
050102 200336 depth = 2
050102 200336 Created webdb at crawl.demo/db
050102 200336 Starting URL processing
050102 200336 Using URL filter: net.nutch.net.RegexURLFilter
......
050102 200337 Plugins: looking in: /u01/nutch/plugins
050102 200337 parsing: /u01/nutch/plugins/parse-html/plugin.xml
050102 200337 parsing: /u01/nutch/plugins/parse-pdf/plugin.xml
050102 200337 parsing: /u01/nutch/plugins/parse-ext/plugin.xml
050102 200337 parsing: /u01/nutch/plugins/parse-msword/plugin.xml
050102 200337 parsing: /u01/nutch/plugins/query-site/plugin.xml
050102 200337 parsing: /u01/nutch/plugins/protocol-http/plugin.xml
050102 200337 parsing: /u01/nutch/plugins/creativecommons/plugin.xml
050102 200337 parsing: /u01/nutch/plugins/language-identifier/plugin.xml
050102 200337 parsing: /u01/nutch/plugins/query-basic/plugin.xml
050102 200337 logging at INFO
050102 200337 fetching http://www./
050102 200337 http.proxy.host = null
050102 200337 http.proxy.port = 8080
050102 200337 http.timeout = 10000
050102 200337 http.content.limit = 65536
050102 200337 http.agent = NutchCVS/0.05 (Nutch; http://www./docs/en/bot.html; n
utch-agent@lists.)
050102 200337 fetcher.server.delay = 1000
050102 200337 http.max.delays = 100
050102 200338 http://www./: setting encoding to GB18030
050102 200338 CC: found http:///licenses/by-nc-sa/2.0/ in rdf of http:
//www./
050102 200338 CC: found text in http://www./
050102 200338 status: 1 pages, 0 errors, 12445 bytes, 1067 ms
050102 200338 status: 0.9372071 pages/s, 91.12142 kb/s, 12445.0 bytes/page
050102 200339 Updating crawl.demo/db
050102 200339 Updating for crawl.demo/segments/20050102200336
050102 200339 Finishing update
64,1 7%
050102 200337 parsing: /u01/nutch/plugins/query-basic/plugin.xml
050102 200337 logging at INFO
050102 200337 fetching http://www./
050102 200337 http.proxy.host = null
050102 200337 http.proxy.port = 8080
050102 200337 http.timeout = 10000
050102 200337 http.content.limit = 65536
050102 200337 http.agent = NutchCVS/0.05 (Nutch; http://www./docs/en/bot.html;
nutch-agent@lists.)
050102 200337 fetcher.server.delay = 1000
050102 200337 http.max.delays = 100
......
之后配置 Tomcat (我的 tomcat 安裝在 /opt/Tomcat) ,
[root@fc3 nutch]# rm -rf /opt/Tomcat/webapps/ROOT*
[root@fc3 nutch]# cp nutch*.war /opt/Tomcat/webapps/ROOT.war
[root@fc3 webapps]# cd /opt/Tomcat/webapps/
[root@fc3 webapps]# jar xvf ROOT.war
[root@fc3 webapps]# ../bin/catalina.sh start
瀏覽器中輸入 http://localhost:8080 查看結(jié)果(遠程查看需要將 localhost 換成相應(yīng)的IP):
搜索測試:
可以看到,Nutch 亦提供快照功能。下面進行中文搜索測試:
注意結(jié)果中的那個“評分詳解”,是個很有意思的功能(Nutch 具有一個鏈接分析模塊),通過這些數(shù)據(jù)可以進一步理解該算法。
考慮到帶寬的限制,暫時不對整個Web爬行的方式進行了測試了。值得一提的是,在測試的過程中,nutch 的爬行速度還是不錯的(相對我的糟糕帶寬)。
Nutch 目前還不支持 PDF(開發(fā)中,不夠完善) 與 圖片 等對象的搜索。中文分詞技術(shù)還不夠好,通過“評分詳解”可看出,對中文,比如“數(shù)據(jù)庫管理員”,是分成單獨的字進行處理的。但作為一個開源搜索引擎軟件,功能是可圈可點的。畢竟,主要開發(fā)者 Doug Cutting 就是開發(fā) Lucene 的大牛
參考信息