基于nutch-1.2实现本地搜索引擎
声明:本博文参考了很多资料,主要来自http://blog.csdn.net/jiutao_tang/article/details/6461884/,http://www.cnblogs.com/xia520pi/p/3615554.html,可以点击这些原文观看
nutch是Apach开源项目,是由java实现的web爬虫,可以直接抓取网页内容,并使用内嵌的Lucene生成本地检索文件,提供全文索引搜索功能.
这里在ubuntu14.04系统中,我采用nutch-1.2+Tomcate6.0.53+IKAnalyzer3.2.8+ant+javacc实现本地搜索引擎.
系统架构:

1.环境配置
jdk的安装是必须的,这个网上教程很多,不赘述.
tomcat的安装参考我的另一篇博文:http://www.cnblogs.com/qj4d/p/7222323.html
nutch的安装也跟tomcat类似,下载nutch1.2后,解压缩,将其/bin目录添加到/etc/profile中,别忘了完成后执行source /etc/profile
NUTCH_HOME=/home/xxxx/Documents/apache-nutch-1.2
export PATH=$PATH:$NUTCH_HOME/bin:
IKAnalyzer3.2.8下载,这个我是从csdn上下的.
ant和javacc的安装很简单,直接apt-get install即可.
2.修改"nutchz1.2/src/java/org/apache/nutch/searcher/Query.java" line 36附近,import异常类:
org.apache.nutch.analysis.ParseException;
line 454附近,将代码修改为如下的样子:

3.修改"nutch-1.2/src/java/org/apache/nutch/analysis/ NutchAnalysis.jj"
在NutchAnalysis.jj中找到"| <SIGRAM: <CJK> >",将其修改为:"| <SIGRAM: (<CJK>)+ >"

将NutchAnalysis.jj文件复制到某个目录下,使用javacc命令编译出7个新的java文件,

将这7个新的java文件移动到"/nutch-1.2/src/java/org/apache/nutch/analysis",覆盖原文件.
4.修改"nutch-1.2/src/java/org/apache/nutch/analysis/ NutchAnalysis.java"文件.
添加一条Import语句:

并且修改line 50 处开始的两个函数,为他们添加 throw ParseException:

5.修改“nutch-1.2/src/java/org/apache/nutch/analysis/ NutchDocumentAnalyzer.java” .
添加两个import语句:

修改line105处的函数,将其注释,修改为IKAnalyzer()分词器:

6.修改"/nutch-1.2/build.xml"文件
在line200行附近添加IKAnalyzer的jar包

7.使用ant执行build.xml文件,可以在/nutch-1.2目录下得到一个新的/build文件目录,将里面的三个文件:nucth-1.2.jar, nutch-1.2.job,nutch-1.2.war
复制到/nutch-1.2目录下,覆盖原文件

8.在/nutch-1.2目录下新建一个txt文件,用来保存初始搜索的url:

9.修改/nutch-1.2/conf/crawl-urlfiliter.txt文件中的配置,这个文件中的正则表达式定义了那些文件可以被Nutch爬行,那些不可以被爬行。其中以“+”号开头的表示属于Nuch合法的Url连接,“-”号开头相反。由于我的搜索引擎主要专注于历史topic,所以我将ulr控制为与历史相关:
# accept hosts in MY.DOMAIN.NAME
#+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
+^http://([a-z0-9]*\.)*lishi.net/
+^http://([a-z0-9]*\.)*renren.com/
+^http://([a-z0-9]*\.)*qulishi.com/
+^http://([a-z0-9]*\.)*.huanqiu.com/
+^http://([a-z0-9]*\.)*.sohu.com/
+^http://([a-z0-9]*\.)*lssdjt.com/
+^http://([a-z0-9]*\.)*zhihu.com/topic/19551077
+^http://([a-z0-9]*\.)*xuekewang.com/
10.配置/nutch-1.2/conf/nutch-site.xml,填写相关的代理属,我使用http.agent.name,以及配置搜索目录:
<configuration>
<property>
<name>http.agent.name</name>
<value>HD nutch agent</value>
</property>
<property>
<name>http.agent.version</name>
<value>1.2</value>
</property>
<property>
<name>searcher.dir</name>
<value>/home/weichao/Documents/newNutch/nutch-1.2/result</value>
<description></description>
</property> </configuration>
11.可以开始爬取网页建立索引了
在/nutch-1.2目录下使用命令:
bin/nutch crawl /home/weichao/Documents/apache-nutch-1.2/url.txt -dir /home/weichao/Documents/apache-nutch-1.2/search_result -threads 8 -depth 5 -topN 100
命令行参数格式:
Crawl命令的使用说明为: crawl <url dir> [-dir index] [-threads num] [-depth num] [-topN num]
urls是存放需要爬行网址的文件夹目录。
-dir选项是抓取的页面的存放目录。
-threads选项是启动的最大线程数。
-depth选项是能爬行的最大深度,也就是最多爬行到第几级的页面,也叫爬行深度。
-topN选项是在每层深度上,所能爬行的最多页面数,也称爬行广度。
12.运行结束之后,使用如下命令测试是否有搜索结果,如果total hits为0,则说明没有建立索引,特别要注意第10步添加search.dir:
/home/weichao/Documents/apache-nutch-1.2/bin/nutch org.apache.nutch.searcher.NutchBean '历史'
13.将nutch目录的nutch-1.2.war复制到tomcat/webapps下,启动tomcat,webapps下面自动生成了一个nutch-1.2的文件夹,打开nutch-1.2/WEB-INF/classes下的nutch-site.xml文件,改为以下内容:
<configuration>
<property>
<name>http.agent.name</name>
<value>HD nutch agent</value>
</property>
<property>
<name>http.agent.version</name>
<value>1.2</value>
</property>
<property>
<name>searcher.dir</name>
<value>/home/weichao/Documents/newNutch/nutch-1.2/result</value>
<description></description>
</property>
<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-lucene|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
</property>
</configuration>
特别注意要添加最后一个plugin.includes,否则不会显示搜索结果,tomcat的log也不会报错.
14.打开"apache-tomcat6.0.29/webapps/nutch-1.2/nutch-1.2/search.jsp",找到"int hitsPerSite",把他的值改为0,避免nutch默认的页面hits有重复
15.搜索"历史",结果反馈如下图所示,可见中文分词还是比较成功的:

14.
基于nutch-1.2实现本地搜索引擎的更多相关文章
- 基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎
基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎 网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并 ...
- 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
目录 一.前言: 二.回顾下OTA的流程: 三.lwip网络框架的知识的使用: 四.如何处理服务器返回的数据? 五.扇区的擦除和烧写? 六.如何调用? 七.好好享用吧! 八.下载: 九.工程截图: 代 ...
- 一个大数据方案:基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎
网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项.由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎, ...
- 【架构】基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎
网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项.由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎, ...
- 利用Lucene与Nutch构建简单的全文搜索引擎
文章地址 1.简介 本次实现分为两个部分,第一个部分是利用Lucene构建一个全文的搜索引擎,另外一部分则是利用Nutch实现同样的功能.由于Lucene并不是一个可以直接运行的程序,且不具备爬虫和文 ...
- Xunsearch迅搜(基于 xapian+scws 的开源中文搜索引擎)安装与简单使用
今天鼓捣了xunsearch,感觉官方指南写得挺详细,于是按照指南一步一步走,但是感觉越看越凌乱,像看API一样,新手看得特费劲,网上也少有新手教程,于是略过今天的歪路,记录一下我的安装步骤. Xun ...
- Ubuntu环境下Nutch+Tomcat 搭建简单的搜索引擎
简易的搜索引擎搭建 我的配置: Nutch:1.2 Tomcat:7.0.57 1 Nutch设置 修改Nutch配置 1.1 修改conf/nutch-site.xml <?xml versi ...
- 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】
1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.3 (2) hadoop-1.2.1 (3)hbase-0.92.1 (4)solr-4.9.0 并解压至/opt/jedi ...
- 基于Flash与window平台本地程序通信实现媒体流发布
0 Web场景下的媒体流发布可以采用Flash原生API实现,但是Flash H264视频压缩参数不可控.音频无法AAC编码,所以一般采用浏览器插件方式,但是浏览器插件有版本兼容问题.不稳定,所以可以 ...
随机推荐
- [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.4 粘性热传导流体动力学方程组
粘性热传导流体动力学方程组: $$\beex \bea \cfrac{\p \rho}{\p t}+\Div(\rho{\bf u})&=0,\\ \rho \cfrac{\rd {\bf u ...
- Python 概念小屋
 Python 中的 if __name__ == '__main__' 该如何理解 python多进程的理解 multiprocessing Process join run
- Linux内核 设备树操作常用API【转】
转自:https://www.linuxidc.com/Linux/2017-02/140818.htm 一文中介绍了设备树的语法,这里主要介绍内核中提供的操作设备树的API,这些API通常都在&qu ...
- EF的三种数据加载方式
EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Loading都是延迟加载. (一 ...
- selenium——键盘操作
很多键盘操作实际是没有意义的.
- 史上最明白的 NULL、0、nullptr 区别分析(老师讲N篇都没讲明白的东东),今天终于明白了,如果和我一样以前不明白的可以好好的看看...
C的NULL 在C语言中,我们使用NULL表示空指针,也就是我们可以写如下代码: int *i = NULL; foo_t *f = NULL; 实际上在C语言中,NULL通常被定义为如下: #def ...
- mitmproxy,mitmdump
mitmproxy,mitmdump # mitmproxy 官网:https://mitmproxy.org/ # githubhttps://github.com/mitmproxy # wind ...
- js检测数据类型四种办法
面试题中经常会考js数据类型检测,今天我来分享一下js中常用的四种方法判断数据类型,欢迎指点更正. 废话不多说,直入正题. 1.typeof console.log(typeof "&quo ...
- SpringBoot图片上传(四) 一个input上传N张图,支持各种类型
简单介绍:需求上让实现,图片上传,并且可以一次上传9张图,图片格式还有要求,网上找了一个测试了下,好用,不过也得改,仅仅是实现了功能,其他不尽合理的地方,还需自己打磨. 代码: //html<d ...
- python之鼠标的操作
鼠标操作的方法,封装在ActionChains类中 perform:执行ActionChains中的所有存储行为 context_click:右键单击 move_to_element:悬停 doubl ...