试用nutch
今天看站点的log,发现有几个搜索nutch的反向链接过来。其实我只是在java编码规范一文提了一下这个词,这样的结果肯定让前来的朋友倍感失望。
下面将我对nutch的一些试用公布一下,供有兴趣的朋友参阅。需要说明的是,nutch现在没有稳定的release,还在不断地根据反馈进行修改,而且目前还不支持汉语的检索。总而言之,现在这个版本对中国用户而言还不实用。我想,这也应当是一直研究并关注nutch的车东没有写笔记的原因吧。
前几天和车东在msn上谈起,觉得目前搭建网站时实现本站检索的最好的方案,是采用车东基于lucene的开源项目web lucene的软件包。而nutch似乎比较适合于建立垂直搜索引擎网站,至少目前如此,我认为。
1、下载安装
不知为什么,这个网站不能直接访问。我用的是2003-09-18的打包(有兴趣的朋友可[url=http://www.infomall.cn/cgi-bin/mallgate/20031008/http://hedong.3322.org/archives/docs/nutch-2003-09-18.tar.gz]从此下载),在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
------------------------------