您的位置:首页 > 其它

Nutch+Lucene搜索引擎开发实践

2014-10-14 09:26 417 查看

网络拓扑

                                                          


图 1 网络拓扑图

安装Java JDK

首先查看系统是否已经安装了其他版本的JDK,如果有,先要把其他版本的JDK卸载。
 
用root用户登录系统。
# rpm-qa|grep gcj
 
显示内容其中包含下面两行信息
# java-1.6.0-openjdk-1.6.0.0-1.57.1.11.9.el6_4.i686
#java-1.7.0-openjdk-1.7.0.9-2.3.8.0.el6_4.i686

卸载

#yum -y remove java-1.6.0-openjdk

#yum -y remove java-1.7.0-openjdk
 
去官网http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下载 jdk-7u60-linux-i586.tar.gz。
在/usr目录下创建java目录。
#mkdir java
把jdk-7u60-linux-i586.tar.gz解压到/usr/java。
#tar-zvxf jdk-7u60-linux-i586.tar.gz -C /usr/java
 
添加环境变量:
# vi /etc/profile     
进入插入模式,在最后一行添加
JAVA_HOME=/usr/java/jdk1.7.0_60
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
export CLASSPATH
wq保存退出。
 
输入命令

#source /etc/profile
使环境变量在当前ssh客户端生效。
 
测试:
#echo $JAVA_HOME   测试环境变量配置是否生效
#java -version     查看java版本信息
#java
#javac             如果这两个命令都能打印出信息,说明安装成功了。
 

部署tomcat

到官网http://tomcat.apache.org/download-70.cgi ,下载apache-tomcat-7.0.54.tar.gz。
 
把apache-tomcat-7.0.54.tar.gz解压到/usr/local。
#  tar zxvf apache-tomcat-7.0.54.tar.gz  -C/usr/local
#  cd /usr/local/
#  mv apache-tomcat-7.0.54  tomcat
 
这时,还不能从外部访问tomcat,需要在linux默认防护墙上打开8080端口。
#vi /etc/sysconfig/iptables
进入插入模式,添加
-AINPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
wq保存退出。
 
重新启动防火墙。
#service iptables restart
 
启动tomcat 。
# /usr/local/tomcat/bin/startup.sh 
在用户端浏览器中输入http://10.1.1.95:8080/,可以看到Tomcat欢迎界面!说明部署成功。
 

部署Nutch

由于我们不需要在分布式环境下部署Nutch,我们选用较早版本的nutch-0.9。下载nutch-0.9.tar.gz,解压到/usr/local。

#  tar zxvf nutch-0.9.tar.gz  -C /usr/local
 

部署nutch搜索页面:

把/usr/local/tomcat/webapps/ROOT文件夹重命名为ROOT_BACK。

#cd/usr/local/tomcat/webapps/

#mvROOT ROOT_BACK

 

复制nutch根目录下的nutch-0.9.war到/usr/local/tomcat/webapps/。

#cp/usr/local/nutch-0.9/nutch-0.9.war /usr/local/tomcat/webapps/

 

启动tomcat。

#/usr/local/tomcat/bin/startup.sh

 

Tomcat成功启动后,我们发现/usr/local/tomcat/webapps/文件夹下多了一个nutch-0.9的文件夹。把nutch-0.9重命名为ROOT。

#mvnutch-0.9 ROOT

 

重新启动tomcat。

#/usr/local/tomcat/bin/shutdown.sh

#/usr/local/tomcat/bin/startup.sh

在用户端浏览器中访问http://10.1.1.95:8080/。得到结果页面如图 1所示。说明搜索页面部署成功。



图 2 Nutch默认搜索入口页
 

数据抓取和内容检索

进入nutch根目录。

#cd/usr/local/nutch-0.9

新建文件multiurls.txt。

#vimultiurls.txt

输入
http://sports.sina.com.cn/ http://sports.sohu.com/ http://sports.qq.com/ http://sports.cntv.cn/ http://sports.ifeng.com/ http://sports.163.com/ http://sports.uusee.com/ http://www.titan24.com/

wq保存退出。

 

修改craw-urlfilter.txt,允许下载任意站点。

#vi /usr/local/ nutch-0.9/conf/craw-urlfilter.txt

把原有的过滤过则注释掉,改为接受任意的url。

# accept hosts in MY.DOMAIN.NAME
##+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
+^

wq保存退出。

 

进入nutch目录,启动下载任务。

#cd /usr/local/nutch-0.9

#bin/nutch crawl multiurls.txt –dirsports –depth 10 –topN 100 –threads 16

参数含义说明如下:

-dir 指定存放爬行结果的目录,本次抓取结果数据存放到sports目录中;

-depth 表明需要抓取的页面深度,本次抓取深度为10层;

-topN 表明只抓取前N个url,本次抓取为取每一层的前100个页面;

-threads 指定Crawl采取下载的线程数,本次指定16个线程进行下载。

下载任务开始执行,如图 2。等待5分钟左右,下载任务执行完毕,如图 3。



图 3 启动下载任务



图 4 下载任务结束
根据下载过程可以看出nutch爬取网页并建立索引库的过程如下:

1)        插入器(Injector)向网页数据库添加起始根URL;

2)        按照要求抓取的层数,用生成器(Generator)生成待下载任务;

3)        调用获取器(Fetcher),按照指定线程数实际下载相应页面;

4)        调用页面分析器(ParseSegment),分析下载内容;

5)        调用网页数据库管理工具(CrawlDb),把二级链接添加到库中等待下载;

6)        调用链接分析工具(LinkDb),建立反向链接;

7)        调用索引器(Indexer),利用网页数据库、链接数据库和具体下载的页面内容,创建当前数据索引;

8)        调用重复数据删除器(DeleteDuplicates),删除重复数据;

9)        调用索引合并器(IndexMerger),把数据合
4000
并到历史索引库中。

 

修改nutch目录下的nutch-site.xml文件,增加索引目录属性指定检索器读取数据的目录。

#vi/usr/local/nutch-0.9/conf/nutch-site.xml

在<configuration></configuration>之间添加

<property>

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

<value>sports.com</value>

<description>sports.com</description>

</property>

<property>

<name>searcher.dir</name>

<value>/usr/local/nutch-0.9/sports</value>

<description></description>

</property>

wq保存退出。

 

在终端命令窗口下测试检索。

#cd/usr/local/nutch-0.9

#bin/nutchorg.apache.nutch.searcher.NutchBean 巴西

检索结果如图 5所示,共找到213条相关结果。

 

使用Readdb工具摘要描述

#bin/nutch readdb sports/crawldb –stats

得到摘要信息如图 6所示,共有15917条链接,成功下载了601个页面。

 

经过上面步骤,搜索引擎的检索准备工作已经完成了。接下来把检索结果部署到tomcat服务器,使用户可以在浏览器中检索。过程如下:

修改tomcat/webapps/ROOT/WEB-INF/classes文件夹下的nutch-site.xml文件,指定检索路径属性参数值。

#vi/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/nutch-site.xml

在<configuration></configuration>之间添加

<property>

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

<value>sports.com</value>

<description>sports.com</description>

</property>

<property>

<name>searcher.dir</name>

<value>/usr/local/nutch-0.9/sports</value>

<description></description>

</property>

重新启动tomcat(如果未启动则直接启动)。

#/usr/local/tomcat/bin/shutdown.sh

#/usr/local/tomcat/bin/startup.sh

                                           


图 5 在终端命令窗口下执行检索命令
                                          

 

图 6 使用Readdb获取摘要描述
 

在用户端浏览器中访问http://10.1.1.95:8080/。检索“世界杯”,报错:Attributevalue is quoted with " which must be escaped when used within the value。是因为tomcat版本升级后(6.0以上),对双引号的处理机制引起的,如果出现双引号包含双引号的情况,就可能会出现这个错误。解决办法是修改conf/catalina.properties文件。

#vi/usr/local/tomcat/conf/catalina.properties

在最后添加

org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false

wq保存退出。

再次检索,出现中文乱码,解决办法是修改conf/server.xml文件。

#vi/usr/local/tomcat/conf/server.xml

找到Connector标签,添加属性URIEncoding="UTF-8"。

wq保存退出。

重新启动tomcat,就可以在用户端进行搜索了。检索“巴西 世界杯”,得到结果如图 7所示。

     


图 7 在用户端搜索的结果

参考文献

[1].    王学松,Lucene+Nutch搜索引擎开发,人民邮电出版社,2008.

[2].    http://www.coreservlets.com/Apache-Tomcat-Tutorial/

[3].    http://wiki.apache.org/nutch/NutchTutorial
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lucene nutch 搜索引擎