本文首先介绍 Nutch 的背景知识,包括 Nutch 架构,爬虫和搜索器。然后以开发一个基于 Nutch 的实际应用为例向读者展示如何使用 Nutch 开发自己的搜索引擎。在该示例中,首先带领读者开发一个作为 Nutch 爬虫抓取的目标网站,目标网站将被部署在域名为 myNutch.com 的服务器上。然后示例说明 Nutch 爬虫如何抓取目标网站内容,产生片断和索引,并将结果存放在集群的2个节点上。最后使用 Nutch 检索器提供的 API 开发应用,为用户提供搜索接口。
Nutch 是一个基于 Java 实现的开源搜索引擎,其内部使用了高性能全文索引引擎工具 Lucene。从 nutch0.8.0开始,Nutch 完全构建在 Hadoop 分布式计算平台之上。Hadoop 除了是一个分布式文件系统外,还实现了 Google 的 GFS 和 MapReduce 算法。因此基于 Hadoop 的 Nutch 搜索引擎可以部署在由成千上万计算机组成的大型集群上。由于商业搜索引擎允许竞价排名,这样导致索引结果并不完全是和站点内容相关的,而 Nutch 搜索结果能够给出一个公平的排序结果,这使得 Nutch 在垂直搜索、档案互联网搜索等领域得到了广泛应用。
![]() ![]() |
![]()
|
- Rational Application Developer v6.0
- Websphere Application Server v6.0
- Nutch 0.8.1
- SSH Service Package
- 主节点RHAS3.0
- 从节点Debian GNU/Linux 3.1
![]() ![]() |
![]()
|
Nutch 搜索引擎是一个基于 Java 的开放源代码的搜索引擎。Nutch 搜索引擎处理流程包括抓取流程和搜索流程,如图 1 所示。相应地 Nutch 也分为2部分,抓取器和搜索器。在抓取流程中,抓取器也叫蜘蛛或者机器人,以广度优先搜索(BFS)的方式从企业内部网或者互联网抓取网页。这个过程涉及到对 CrawlDB 和 LinkDB 数据库的操作。然后 Nutch 解析器开始解析诸如 HTML、XML、RSS、PDF等不同格式的文档。最后 Nutch 索引器针对解析结果建立索引并存储到 indexDB 和 SegmentsDB 数据库中,以供搜索器搜索使用。
在搜索流程中,搜索应用使用输入关键词调用 Nutch 搜索接口(Nutch Query Interface)。应用可通过网页上的输入框输入相应关键词。搜索接口解析搜索请求为 Lucene 全文检索引擎可以识别的格式。Nutch 索引器将会调用 Lucene 引擎来响应请求在 indexDB 上展开搜索。最后搜索接口收集从索引器返回的URL、标题、锚和从 SegmentsDB 返回的内容。所有上述内容将被提供给排序算法进行排序。排序完成后,搜索接口将返回命中的搜索结果。由于构建在 Hadoop 分布式文件系统之上, Nutch 对CrawlDB, LinkDB, SegmentsDB 和 IndexDB 数据库的操作都是通过调用 M/R(map/reduce) 函数完成的。这使得 Nutch 具有了集群扩展能力。
图 1 Nutch搜索引擎架构图
现在将开发一个供 Nutch 爬虫抓取的目标网站应用。这个应用使用 RAD v6.0(Rational Application Developer)作为集成开发工具开发。应用开发完成后,将被部署在 WAS v6.0(Websphere Application Server)服务器上,本样例中服务器的域名设置是 myNutch.com。读者可以按照下面的步骤来开发该目标网站应用。
- 创建一个动态 Web 项目。打开 RAD,选择 File > New > Project,然后在向导里选择动态 Web 项目,如图 2 所示。
图 2 创建一个动态 Web 项目
- 设计网页。在项目里面,选择 File > New > HTML/XHTML,创建 index.html, one.html,two.html 和 three.html 一共4个文件。 项目的最终结构组成如图 3 所示。
图 3 项目的最终结构组成
- 在 WAS v6.0 中运行项目。 打开 RAD, 选择 project > Run > Run on Server, 部署并在服务器上运行。如图 4 所示。
图 4 在服务器上运行
本文转自IBM Developerworks中国