利用Lucene与Nutch构建简单的全文搜索引擎

文章地址

1.简介

本次实现分为两个部分,第一个部分是利用Lucene构建一个全文的搜索引擎,另外一部分则是利用Nutch实现同样的功能。由于Lucene并不是一个可以直接运行的程序,且不具备爬虫和文档处理的功能,因此在这一部分利用到了Heritrix和HTMLParser这两个工具分别实现爬虫与HTML文档解析的功能。而使用Nutch的时候只需要一些简单的配置和安装就可以直接运行。最后还对这两者进行了一个简单的对比,说明其各自的特点和适应的范围。

2.Lucene

2.1 爬虫的设计

由于Lucene不具备爬虫的功能,因此这里使用到了Heritrix这样的一个工具。我们利用Heritrix爬取一个指定网站(如:南京大学信息管理学院官方网站)的内容,为了简单起见这里只爬去网页格式的文档,而“.doc/.xls/.ppt/.pdf”等格式的文件则直接忽略,因此这里还需要对爬虫进行一个简单的设计。
这里使用的Heritrix版本为Heritrix-1.14.4,爬虫的配置安装过程如下:
(1)源代码的导入
由于这里需要一些自定义的功能,因此使用的是Heritrix的源代码版本。为方便开发,首先我们需要将其导入Myeclipse。在Myeclipse下建立一个工程名为“MyHeritrix”。
导入类库
这一步需要将 Heritrix-1.14.4-src 下的 lib 文件夹拷贝到 MyHeritrix 项目根目录;方法如下:在 MyHeritrix 工程上右键单击选择“Build Path Configure Build Path …”,然后选择 Library 选项卡,单击“Add JARs …”,在弹出的“JAR Selection”对话框中选择 MyHeritrix 工程 lib 文件夹下所有的 jar 文件,然后点击 OK 按钮。
拷贝源代码
将 Heritrix-1.14.4-src\src\java 下的 com、org 和 st 三个文件夹拷贝进 MyHeritrix 工程的 src 下。这三个文件夹包含了运行 Heritrix 所必须的核心源代码;将 Heritrix-1.14.4-src\src\resources\org\archive\util 下的文件 tlds-alpha-by-domain.txt 拷贝到 MyHeritrix\src\org\archive\util 中。该文件是一个顶级域名列表,在 Heritrix 启动时会被读取;将 Heritrix-1.14.4-src\src 下 conf 文件夹拷贝至 Heritrix 工程根目录。它包含了 Heritrix 运行所需的配置文件;将 Heritrix-1.14.4-src\src 中的 webapps 文件夹拷贝至 Heritrix 工程根目录。该文件夹是用来提供 servlet 引擎的,包含了 Heritrix 的 web UI 文件。
(2)源代码的修改
由于我们需要一个功能:不爬取网页中的.doc/.xls/.ppt/.pdf等格式的文件,而是自定义需要爬取的网页文件,因此我们需要自行修改程序。这里实现的方法为扩展 FrontierScheduler 来抓取特定网站内容。
FrontierScheduler 是org.archive.crawler.postprocessor 包中的一个类,它的作用是将在 Extractor 中所分析得出的链接加入到 Frontier 中,以待继续处理。在该类的 innerProcess(CrawlURI) 函数中,首先检查当前链接队列中是否有一些属于高优先级的链接。如果有,则立刻转走进行处理;如果没有,则对所有的链接进行遍历,然后调用 Frontier 中的 schedule() 方法加入队列进行处理。这里我们自行设计一个类FrontierSchedulerForDaven继承FrontierScheduler类来修改程序的功能:

1
2
3
4
5
6
7
8
9
public class FrontierSchedulerForDaven extends FrontierScheduler
     然后在该类中重写schedule函数:
protected void schedule(CandidateURI caURI)
String uri=caURI.toString();
if (uri.indexOf( "dns:" )!=- 1 ){getController().getFrontier().schedule(caURI);} else
if (uri.indexOf(“nju.edu.cn ")!=-1)||uri.indexOf(" .html ")!=-1||uri.indexOf(" .php")!=- 1
||uri.indexOf( ".jsp" )!=- 1 ||uri.indexOf( ".asp" )!=- 1 ||uri.indexOf( ".shtml" )!=- 1 ))

通过这样的一个布尔表达式实现就可以实现只爬取后缀名为html、php、jsp、asp、shtml格式的文件,其他类型的文件一律忽略。
程序修改完成之后,在修改conf/modules/Processor.options文件,在该文件中添加如下一行:
1
(3)Heritrix启动与爬虫创建
在启动之前,我们还需要对Heritrix进行一些简单的配置,找到conf/Heritrix.properties文件,在文件当中将Heritrix.cmdline.admin(用户名、密码)和Heritrix.cmdline.port(端口)两个参数修改为如下形式:
2
上面的配置代表,Heritrix启动时的端口为9999,用户名密码分别为admin和admin。
完成上面步骤之后,找到org.archive.crawler.Heritrix类,该类是Heritrix的主类入口,直接运行该类就可以启动Heritrix。启动成功之后,控制台会输出如下信息:
3
从上图可以看出,Heritrix内置了一个Jetty服务器,在浏览其启动的地址为:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值