醉里且贪欢笑,要愁那得工夫。近来始觉古人书,信着全无是处。 昨夜松边醉倒,问松“我醉何如”。只疑松动要来扶,以手推松曰:“去”!

2007年4月2日星期一

NUTCH 8.1 配置(转)

nutch是一个非常不错的项目,由于最近我需要对一些内部的文档和站点建一个search的站点,所以又开始了nutch的旅程。不过这次是坎坎坷坷,尽把问题出在了小地方了。当然,也有很久没有再用过nutch了,之前哪次还是一年前的事了。现在的0.8.1变化也是很大。本文所讲述的版本都是基于0.8.1来讲的。与0.8相比了一下,从抓取和log以及



安装nutch还是比较简单的,从apache的网站上去下哪个66M之大的包包:

http://lucene.apache.org/nutch/release/



另外,你还可以使用Luke来验证你的index,并通过它来进行深入的查询:

http://www.getopt.org/luke/



我还特别的安装一个tomcat来让大家上nutch来“google一把”的感觉,这样你也需要下一个tomcat(其实只要是一个servlet容器就好):

http://tomcat.apache.org/download-55.cgi




简单的说明一下各文件:

apache-tomcat-5.5.20.tar.gz

nutch-0.8.1.tar.gz

lukeall-0.7.jar



另外,我的操作系统是Mac OSX 10.4.8,JDK版本为1.5.0_07。



我把tomcat和nutch解到了~/japp目录中:

/Users/HD/japp/apache-tomcat-5.5.20


/Users/HD/japp/nutch-0.8.1



首先需要简单的设置一些环境变量,我在home的.profile中加入了以下设置:

export JAVA_HOME=/usr

export NUTCH_HOME=/Users/HD/japp/nutch-0.8.1



好了,开始我们的正式工作罢。



首先,把我们要抓取的网站的起始地址加入到nutch中去:


>> CODE



cd $NUTCH_HOME

mkdir urls

echo 'http://lucene.apache.org/nutch/' > urls/nutch




你可以建一个目录,目录中的每一个文件中的每一行都是一个站点的“起抓页”。nutch会从这些url中开抓的。 :)



同时你需要告诉nutch,有哪些url被适配时,抓取到索引库中来。编辑conf目录中的crawl-urlfilter.txt文件,将MY.DOMAIN.NAME换为你想被抓进来的站点的名字,比如我是这样写的:


>> CODE


# accept hosts in MY.DOMAIN.NAME


+^http://([a-z0-9]*\.)*apache.org/

+^http://([a-z0-9]*\.)*woodpecker.org.cn/




这样,所有可以适配上这两个规则的网页都会被抓取下来。



最后还需要将抓取网页时提交的一些信息,必须要配置的属性是http.agent.name。设置的文件是conf中的nutch-site.xml:


>> CODE


<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>




<!-- Put site-specific property overrides in this file. -->



<configuration>

<property>

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

<value>HD nutch agent</value>


</property>

</configuration>




其它还可选的有http.agent.url、http.agent.email、http.agent.version。设置好这些属性,对于被抓取的站点来讲是十分友好的行为,所以最好设置。



我们可以开抓了:


>> CODE


cd $NUTCH_HOME

bin/nutch crawl urls -dir crawl -depth 5 -topN 50





我们需要使用crawl命令进行抓取。urls参数是存放抓取起始点的目录。-dir参数说明了抓取后的存储目录。-depth参数说明了抓取的层级深度。而-topN说明了一个层级抓取网页的数量。



执行这个命令需要一点时间,结束时可以看到这样的输出:

500){this.width = 500;}" onerror="this.src='/images/picError.gif'" border="0" width="500">


我们可以看到index被增加到了crawl/indexes目录中。还可以看看存储数据的目录结构:

500){this.width = 500;}" onerror="this.src='/images/picError.gif'" border="0" width="500">


你可以看到index目录中的文件,如果没有这些,说明设置有了问题了。



双击一下lukeall-0.7.jar,我们来打开索引:

500){this.width = 500;}" onerror="this.src='/images/picError.gif'" border="0" width="500">


还可以看看我们抓到了什么:


500){this.width = 500;}" onerror="this.src='/images/picError.gif'" border="0" width="500">


当然,你还可以在库中进行查询:

500){this.width = 500;}" onerror="this.src='/images/picError.gif'" border="0" width="500">


不过要注意,查询条件的输入还不能良好的支持中文,不知是osx的问题还是lukeall的问题。 :(



一切都验证好了,我们来建一个搜索的站点罢。


>> CODE


cd ~/japp/apache-tomcat-5.5.20/webapps

rm -rf *

mkdri ROOT


cd ROOT

cp $NUTCH_HOME/nutch-0.8.1.war .

jar xvf nutch-0.8.1.war

rm nutch-0.8.1.war




因为偶们会用中文查,所以需要把URI Encode改为UTF-8。编辑tomcat的conf目录中的server.xml,找到8080 port的connector段加入URIEncoding="UTF-8",如下:


>> CODE


<Connector port="8080" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"


enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true"

URIEncoding="UTF-8" />






来启动我们搜索站点罢:


>> CODE


cd $NUTCH_HOME


~/japp/apache-tomcat-5.5.20/bin/startup.sh






打开浏览器,定位到 http://localhost:8080

500){this.width = 500;}" onerror="this.src='/images/picError.gif'" border="0" width="500">


查询一下英文:

500){this.width = 500;}" onerror="this.src='/images/picError.gif'" border="0" width="500">


查询一下中文,我自己索引了一个中文站 :)

500){this.width = 500;}" onerror="this.src='/images/picError.gif'" border="0" width="500">





除了右上角出现了中文的乱码,其它好像都还不错

没有评论: