試用nutch
今天看網站的log,發現有幾個搜尋nutch的反向連結過來。其實我只是在java編碼規範一文提了一下這個詞,這樣的結果肯定讓前來的朋友倍感失望。
下面將我對nutch的一些試用公布一下,供有興趣的朋友參閱。需要說明的是,nutch現在沒有穩定的release,還在不斷地根據反饋進行修改,而且目前還不支援漢語的檢索。總而言之,現在這個版本對中國使用者而言還不實用。我想,這也應當是一直研究並關注nutch的車東沒有寫筆記的原因吧。
前幾天和車東在msn上談起,覺得目前搭建網站時實現本站檢索的最好的方案,是採用車東基於lucene的開源項目web lucene的軟體包。而nutch似乎比較適合於建立垂直搜尋引擎網站,至少目前如此,我認為。
1、下載安裝
不知為什麼,這個網站不能直接存取。我用的是2003-09-18的打包(有興趣的朋友可從此下載),在Red Hat Linux 8.0+JRE 1.4.1+Tomcat 4.1試用通過。tar zxvf nutch-2003-09-18.tar.gz
cd nutch-2003-09-18 <----命令執行完後所在目錄稱之為$NUTCH_HOME,僅供描述之用。
ant
ant package
bin/nutch <---如果一切正常,此時應出現“Usage: nutch COMMAND”等字樣
2、試運行指令碼說明
這個指令碼是cutting在tutorial中說明的整理。指令碼中的命令最好通過指令碼依次運行,$s1、$s2和$s3三個變數的賦值運算式是一樣的,但三個值不相同,這依賴於啟動並執行上下文。我第一次運行時,就犯了弱智的錯誤,拆開運行,結果出錯。:)
| 初始準備 |
|
|
|
mkdir db |
建立目錄存放web database |
|
mkdir segments |
|
|
bin/nutch admin db -create |
建一個新的空的資料庫 |
| 第一輪抓取 |
|
|
|
bin/nutch inject db -dmozfile content.rdf.u8 -subset 3000 |
從DMOZ列表中取得URL並加入資料庫 |
|
bin/nutch generate db segments |
根據資料庫內容,產生一個抓取列表(fetchlist) |
|
s1=`ls -d segments/2* | tail -1` |
剛才產生的抓取列表放在最後一個目錄中,取其名 |
|
bin/nutch fetch $s1 |
利用機器人抓頁面 |
|
bin/nutch updatedb db $s1 |
利用抓取結果更新資料庫 |
| 第二輪抓取 |
|
|
|
bin/nutch analyze db 5 |
迭代5次分析頁面的連結 |
|
bin/nutch generate db segments -topN 1000 |
將排行前1000個URL產生新的抓取列表 |
|
s2=`ls -d segments/2* | tail -1` |
執行抓取、更新、并迭代2次分析連結 |
|
bin/nutch fetch $s2 |
|
|
bin/nutch updatedb db $s2 |
|
| 第三輪抓取 |
|
|
|
bin/nutch analyze db 2 |
|
|
bin/nutch generate db segments -topN 1000 |
|
|
s3=`ls -d segments/2* | tail -1` |
|
|
bin/nutch fetch $s3 |
|
|
bin/nutch updatedb db $s3 |
|
|
bin/nutch analyze db 2 |
(為下一次做準備?) |
| 索引並去重 |
|
|
|
bin/nutch index $s1 |
|
|
bin/nutch index $s2 |
|
|
bin/nutch index $s3 |
|
|
bin/nutch dedup segments dedup.tmp |
|
| 重啟tomcat |
|
|
|
catalina.sh start |
在./segments所在的目錄中啟動 |
3、指令碼的改動與下載
DMOZ的檔案太大了,下載不易,如果僅為實驗,似乎也沒必要從那裡選URL。我改了一下指令碼,在$NUTCH_HOME目錄下建立一個urls.txt檔案,裡面一行一個打算搜尋的網站的URL,nutch將從這個urls.txt中取網站的URL。
指令碼可以下載以參考,運行指令碼放在$NUTCH_HOME目錄下,參考下列命令運行:
sh all.sh
4、提供web檢索
前面忙活了半天,只是把網頁抓回來、解析了網頁並做作了索引。下面說明一下如何利用nutch自己帶的jsp程式提供檢索服務。cd $TOMCATHOME/webapps
mv ROOT ROOTOLD
mkdir ROOT
cd ROOT
cp $NUTCH_HOME/nutch-2003-09-18.war ./ROOT.war
jar xvf ROOT.war
cd $NUTCH_HOME
$TOMCAT_HOME/bin/shutdown.sh
$TOMCAT_HOME/bin/catalina.sh start
此時,如果不出意外,應可以訪問了。
我的試用URL是http://cdls.nstl.gov.cn/se/,(其中我把nutch改動了一下,沒把它放在ROOT目錄下),供參考。此時,不要檢索漢字,只能檢索英文,如hedong 或lucene什麼的。
試用倉促,難免有錯,歡迎朋友進行交流。
參考文獻:
基於Lucene/XML的站內全文檢索索引解決方案
http://www.chedong.com/tech/weblucene.html
Lucene學習筆記(2)
http://hedong.3322.org/archives/000208.html
running.sh的指令碼
---------------------------------------
#!/bin/bash
mkdir db
mkdir segments
bin/nutch admin db -create
bin/nutch inject db -urlfile urls.txt
bin/nutch generate db segments
s1=`ls -d segments/2* | tail -1 `
echo $s1
bin/nutch fetch $s1
bin/nutch updatedb db $s1
bin/nutch analyze db 5
bin/nutch generate db segments -topN 100
s2=`ls -d segments/2* | tail -1`
echo $s2
bin/nutch fetch $s2
bin/nutch updatedb db $s2
bin/nutch analyze db 2
bin/nutch generate db segments -topN 100
s3=`ls -d segments/2* | tail -1`
echo $s3
bin/nutch fetch $s3
bin/nutch updatedb db $s3
bin/nutch analyze db 2
bin/nutch index $s1
bin/nutch index $s2
bin/nutch index $s3
bin/nutch dedup segments dedup.tmp
------------------------------