Nutch+Lucene搜索引擎开发实践
网络拓扑
图 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
使环境变量在当前sshclient生效。
測试:
#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默认防护墙上打开8080port。
#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),把数据合并到历史索引库中。
改动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个页面。
经过上面步骤,搜索引擎的检索准备工作已经完毕了。接下来把检索结果部署到tomcatserver,使用户能够在浏览器中检索。步骤例如以下:
改动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.
Nutch+Lucene搜索引擎开发实践的更多相关文章
- Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)
一.为何开博客写<Lucene/Solr搜索引擎开发笔记> 本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/ ...
- Lucene/Solr搜索引擎开发笔记 - 第2章 Solr安装与部署(Tomcat篇)
一.安装环境 图1-1 Tomcat和Solr的版本 我本机目前使用的Java版本为JDK 1.8,因为Solr 4.9要求Java版本为1.7+,请注意. 二.Solr部署到Tomcat流程 图1- ...
- 聊聊基于Lucene的搜索引擎核心技术实践
最近公司用到了ES搜索引擎,由于ES是基于Lucene的企业搜索引擎,无意间在“聊聊架构”微信公众号里发现了这篇文章,分享给大家. 请点击链接:聊聊基于Lucene的搜索引擎核心技术实践
- 传智播客课程——Lucene搜索引擎
Lucene不是一个现成的程序,类似文件搜索程序或web网络爬行器或是一个网站的搜索引擎.Lucene是一个软件库,一个开发工具包,而不是一个具有完整特征的搜索应用程序.它本身只关注文本的索引和搜索. ...
- 《JavaScript设计模式与开发实践》整理
最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint
前言:在 上一篇 TFS2015敏捷开发实践 中,我们给大家介绍了TFS2015中看板的基本使用和功能,这一篇中我们来看一个具体的场景,如何使用看板来运行一个sprint.Sprint是Scrum对迭 ...
- Android游戏开发实践(1)之NDK与JNI开发01
Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码&q ...
- Android游戏开发实践(1)之NDK与JNI开发02
Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...
随机推荐
- [破解]java打包Exe工具 - Jar2Exe Wizard
打包java文件为exe的方法和软件有很多,还有一些开源的软件和一些免费的软件. 我用过的所有打包exe软件中,Jar2Exe Wizard是最好用的,但是只有一个月的试用期,需要的可以从官网下载. ...
- 如何关闭android studio开发环境自动保存
使用DW习惯了现在转到学习开发android,请问怎样关闭android studio的自动保存功能,然后按ctrl+s进行保存,因为有时候代码不想让其保存,他也自动保存了. File -> S ...
- tracert路由跟踪命令分析判断
可能有的会使用路由跟踪命令 ,可是却看不太明确显示出来的结果.结合我的来说明一下. (1)tracert命令介绍 tracert是路由跟踪命令,通过该命令的返回结果,能够获得本地到达目标主机所经过的网 ...
- [项目整理]Win32,MFC的可执行文件只能运行一次
//第一种方法:控制release版本的exe文件只能运行一次 #ifndef _DEBUG //debug 版本中,项目属性-->预处理器 -->预处理定义: 有_DEBUG if (F ...
- Windows8和MacOS10.9双系统安装及Mac经常使用软件安装--联想E49A
前提 本篇内容所描写叙述的内容仅仅适合联想E49A笔记本,经过本篇的内容之后,对于Mac OS 10.9的使用达到正常工作使用的标准,完美度已经比較好了. 结果例如以下:显卡.网卡(RTL8168). ...
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content P ...
- 2014最新SSH框架面试题大收集
(1)Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transati ...
- 杭电acm阶段之理工大版
想參加全国软件设计大赛C/C++语言组的同学,假设前一篇<C和指针课后练习题总结>没看完的,请先看完而且依照上面的训练做完,然后做以下的训练. 传送门:http://blog.csdn.n ...
- loj1245(数学)
传送门:Harmonic Number (II) 题意:求sum=n/1+n/2+n/3+...+n/n.(n<2^31) 分析:在一定的区间内n/i的值是一定的,因此要跳过这段区间来加速求解. ...
- 你的App为什么上不了TOP10?
App市场风起云涌.但是,却仅仅有少数几个App能成为"暴发户",很多其它的则沉淀在应用商店中无人问津. 在移动互联网时代.智能手机成为了中心. 手机之所以智能.就在于手机上 ...