前言:msn空间丢失以及csdn空间丢失,导致很多以前写的文档都不见了~~幸好搜索到了,贴回来留念~~2007年的记忆:)
part1:简单配置与发布
注:本文为个人学习后之总结,如有错误和不足,还望各位高手提醒补充,谢谢。QQ:41981172
经过那么多天的学习,个人认为开发搜索的主要流程如下:1.信息抓取 2.分词 3.索引 4分布式
只是个人基于nutch的感觉,不足的地方各位还要速度告诉我,让我可以继续修改~~<2007-07-17>
(一)环境配置及基本数据抓取
Nutch是一个基于Lucene的开源搜索引擎,是一个完整的解决方案。网上有很多相关文档,但实际参考时,总会被一些小的细节弄得错误百出~~被逼无奈,自己重新总结,以备日后参考。
PS:为了那些超级入门的兄弟姐妹,很多过于基础的部分也提了下,表嫌偶啰嗦哦~。
1. 环境及安装:
(1) 环境JDK1.6/TOMCAT6/Cygwin2.510/nutch-0.9
(2) JDK1.6 http://java.sun.com/javase/downloads/index.jsp
安装全部下一步,安装好后配置环境变量:
我的电脑—右键属性—高级—环境变量—新建
变量名:JAVA_HOME
变量值:JDK的安装目录,比如C:\Program Files\Java\jdk1.6.0_01
(3) TOMCAT6 http://tomcat.apache.org/download-60.cgi
zip版解压缩,目录任意(只要你记得住)
exe版安装,全下一步,目录同上
注:写本文件时,本人将tomcat保存在c:/ 命名为tomcat6
测试:C:\tomcat6\bin\startup.bat,运行正常即ok,如果控制台闪一下就消失了,很有可能你的JAVA_HOME配置有误
(4) Cygwin2.5 http://www.cygwin.com/
下载后我选择了online安装,比较慢,但是不容易出错,所有基本都可以下一步
(5) Nutch0.9 http://www.apache.org/dyn/closer.cgi/lucene/nutch/
下载后为.tar.gz文件,这个安装比较麻烦,它需要用Cygwin模拟unix环境.
启动Cygwin
运行成功后在Cygwin安装目录下生成一个名叫home文件夹
将tar.gz文件拷贝至home中当前使用用户的文件夹下(文件夹名参考Cygwin控制台)然后在Cygwin控制台输入tar -zxvf nutch-0.9.tar.gz将文件解压缩
将解压好的nutch-0.9剪切到一个比较好找的位置,比如我放在了d:/下,其实没有什么实际意义.
测试:Cygwin控制台输入cd d:/nutch-0.9转到nutch的工作目录下键入bin/nutch,如果出现一堆信息,那么,恭喜你,配置ok了
2. 数据的抓取
(1) 建立抓取目录:
在nutch-0.9目录下建一个叫url的文件/文件夹,名称任意,后缀名有无均可,在该文件中写入需要抓取的网站url(如建立的为文件夹,则在文件夹内建立文件写url) ,例如填写http://www.sina.com.cn/
注1:这里http://以及后面的"/" 缺一不可,网上资料是说该文件内容和conf/crawl-urlfilter.txt对应,如果不写全的话会抓不全完整路径,至于是否可修改crawl-urlfilter.txt适应url文件,我没有试过,如果有谁试过告诉我声啊。
注2:有些网站虽然可以用域名访问,但是内页都用ip,不用域名,这种情况建议你写带ip的地址或都写上,避免只抓了首页就抓不下去了,当然,抓什么信息并不是只有url说得算,url是一个列表,crawl-urlfilter.txt中才能决定究竟从这个列表中,怎么抓取,抓取什么。具体它的配置,下边再做讲解。
注3:如果你想要抓取多个网站,只需要在url中如下填写
当然,在crawl-urlfilter.txt也要做相应配置。
(2) 配置crawl-urlfilter.txt:
打开nutch-0.9/conf/crawl-urlfilter.txt,找到这两行
# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
红色部分是一个正则,表示搜索的范围
在这里我改为+^http://([a-z0-9]*\.)*sina.com.cn/
表示抓取sina下的所有,这只是个范围,但具体抓它的多少层,由命令决定
注1:这里的配置与url对应,代表从url文件列表中筛选。
注2:大面积抓取时红色部分可写成+http://代表抓所有页
也可写成+^http://([a-z0-9]*\.)*com/代表抓所有.com结尾的页
以上两种抓法,抓取的页包括url中的网址所连接的广告链等。
注3:抓多个站可用以下方式(记得与url文件对应)
# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*sina.com.cn/
+^http://([a-z0-9]*\.)*163.com/
按照如上添加,每增加一个url都要重起服务器,为了避免重起,可以写成如下格式,以不变应万变。
+^http://([a-z0-9]*\.)*cn/
+^http://([a-z0-9]*\.)*com/
……
注4:改配置文件还能设置更多相关信息,比如如下,设定那些文件不被抓取
# skip image and other suffixes we can't yet parse
-\.(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|exe|jpeg|JPEG|bmp|BMP|rar|RAR|js|JS)$
(3) 修改D:\nutch-0.9\conf\nutch-site.xml,具体为什么加这个我也说不清楚,但尝试了几次,如果不加就会抓不到数据。
<configuration>
<property>
<name>http.agent.name</name>
<value>*</value>
</property>
</configuration>
(4) 运行crawl抓取网页
在Cygwin2控制台下输入cd d:nutch-0.9
转到nutch目录下,运行
bin/nutch crawl url -dir mydir -depth 2 -threads 4 -topN 50 >&logs/logs1.log
其中:
-url 就是刚才我们创建的url文件,存放我们要抓取的网址
-dir 指定抓取内容所存放的目录,如上存在mydir中
-threads 指定并发的线程数
-depth 表示以要抓取网站顶级网址为起点的爬行深度
-topN 表示获取前多少条记录,可省
-logs/logs1.log 日志文件的存储地址,如上操作可能造成报无法找到logs错误,没关系,可以手工建立一个logs文件夹,或者干脆不要文件夹直接打名称。省略则将相关运行信息全部在控制台显示。
此处我测试语句委bin/nutch crawl url -dir mydir -depth 3 -threads 4
抓取后,在nutch目录下生成一个mydir文件夹,里面包含如下目录:
①/② crawldb/ linkdb:web link目录,存放url 及url的互联关系,作为爬行与重新爬行的依据,页面默认30天过期(可以在nutch-site.xml中配置,后面会提到)
③ segments:一存放抓取的页面,与上面链接深度depth相关,depth设为2则在segments下生成两个以时间命名的子文件夹,比如” 20061014163012”,打开此文件夹可以看到,它下面还有6个子文件夹,分别是
crawl_generate: names a set of urls to be fetched
crawl_fetch: contains the status of fetching each url
content: contains the content of each url
parse_text: contains the parsed text of each url
parse_data: contains outlinks and metadata parsed from each url
crawl_parse: contains the outlink urls, used to update the crawldb
④ indexes:索引目录,我运行时生成了一个” part-00000”的文件夹,
⑤ index:lucene的索引目录(nutch是基于lucene的,在nutch-0.9\lib下可以看到lucene-core-2.1.0.jar,最后有luke工具的简单使用方法),是indexs里所有index合并后的完整索引,注意索引文件只对页面内容进行索引,没有进行存储,因此查询时要去访问segments目录才能获得页面内容
简单测试,在cygwin中输入”bin/nutch org.apache.nutch.searcher.NutchBean apache”,即调用NutchBean的main方法搜索关键字”apache”,在cygwin可以看到搜索出:Total hits: 29(hits相当于JDBC的results)
注1:如搜索结果始终为0,除因为未上述nutch-0.8.1\conf的nutch-site.xml外,depth如果设为1也可能造成搜索结果为0)
注2:我坐如上测试时,是抓了两个公司的站,然后以icp为关键字查询,成功。但是后来抓新浪,测试中无法查询中文关键字,所以找不到合适关键字测试,结果一直为0。在此提醒各位,及时此处测试抓取数为0,也可以继续下面的步骤,这不只算阶段调试,供各位参考。
3. Tomcat的发布运行
将nutch-0.9下面有nutch-0.9.war,拷贝到Tomcat\webapps下,可以直接用winrar解压到此目录下,我是用Tomcat启动后解压的,解压文件夹名为:nutch
打开nutch\WEB-INF\classes下nutch-site.xml文件,将
<configuration></configuration>改为
<configuration>
<property>
<name>searcher.dir</name>
<value>D:\nutch-0.9\mydir</value>
</property>
</configuration>
注1:<value>中指向生成后的那个文件夹,自己的路径哦
注2:其中我们还可以设置重新爬行时间(页面默认30天过期)
<property>
<name>fetcher.max.crawl.delay</name>
<value>30</value>
<description></description>
</property>
注3:很多参数可以在nutch-0.9\conf下的nutch-default.xml查询,nutch-default.xml中的property配置都带有注释可拷贝测试。
打开http://localhost:8080/nutch 进行查询测试
如结果出现乱码将tomcat\conf下的server.xml中的Connector部分改成如下形式:
(红色部分为添加的)
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false"
redirectPort="8443"
acceptCount="100"
connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8" useBodyEncodingForURI="true" />
4. 关于luke的使用
luke索引察看器,目前版本为0.7.1
下载地址:http://www.getopt.org/luke/ luke-src-0.7.1.zip
我下来的时候直接解压缩,双击运行里面lukeall-0.7.1.jar文件
打开后就有对话框,让你选择路径,你选择索引文件夹下的文件就能打开看了
目前我只研究到这一步,其他的还忘各位加油~~