- 浏览: 959989 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (385)
- 搜索引擎学习 (62)
- 算法 (1)
- 数据库 (15)
- web开发 (38)
- solr开发 (17)
- nutch 1.2 系统学习 (8)
- cms (1)
- 系统架构 (11)
- linux 与 unix 编程 (16)
- android (15)
- maven (1)
- 关注物流 (1)
- 网址收集 (1)
- 分布式,集群 (1)
- mysql (5)
- apache (1)
- 资料文档备份 (7)
- 上班有感 (0)
- 工作流 (15)
- javascript (1)
- weblogic (1)
- eclipse 集成 (1)
- JMS (7)
- Hibernate (1)
- 性能测试 (1)
- spring (6)
- 缓存cache (1)
- mongodb (2)
- webservice (1)
- HTML5 COCOS2D-HTML5 (1)
- BrowserQuest (2)
最新评论
-
avi9111:
内陷到android, ios, winphone里面也是随便 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
avi9111:
呵呵,做不下去了吧,没有第二集了吧,游戏是个深坑,谨慎进入,其 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
excaliburace:
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
spring security 2添加用户验证码 -
yuanliangding:
Spring太强大了。
Spring Data JPA 简单介绍 -
小高你好:
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
级别: 中级 王 飞鹏 (wangfp@cn.ibm.com), 软件工程师, IBM 2008 年 10 月 16 日 本文首先介绍 Nutch 的背景知识,包括 Nutch 架构,爬虫和搜索器。然后以开发一个基于 Nutch 的实际应用为例向读者展示如何使用 Nutch 开发自己的搜索引擎。在该示例中,首先带领读者开发一个作为 Nutch 爬虫抓取的目标网站,目标网站将被部署在域名为 myNutch.com 的服务器上。然后示例说明 Nutch 爬虫如何抓取目标网站内容,产生片断和索引,并将结果存放在集群的2个节点上。最后使用 Nutch 检索器提供的 API 开发应用,为用户提供搜索接口。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> Nutch 是一个基于 Java 实现的开源搜索引擎,其内部使用了高性能全文索引引擎工具 Lucene。从 nutch0.8.0开始,Nutch 完全构建在 Hadoop 分布式计算平台之上。Hadoop 除了是一个分布式文件系统外,还实现了 Google 的 GFS 和 MapReduce 算法。因此基于 Hadoop 的 Nutch 搜索引擎可以部署在由成千上万计算机组成的大型集群上。由于商业搜索引擎允许竞价排名,这样导致索引结果并不完全是和站点内容相关的,而 Nutch 搜索结果能够给出一个公平的排序结果,这使得 Nutch 在垂直搜索、档案互联网搜索等领域得到了广泛应用。
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。读者可以按照下面的步骤来开发该目标网站应用。
在抓取网站之前,需要定义搜索引擎。在本样例中Nutch被配置为集群方式。集群包括主节点(地址9.181.87.172,操作系统 RHAS3.0)和从节点(地址 9.181.87.176,操作系统 Debian)。如前文介绍,Nutch 的集群能力主要利用了 Hadoop 的分布式计算环境。下面介绍如何定义 Nutch 搜索引擎。
在使用 Nutch 抓取之前,首先需要启动 Hadoop 服务。清单 6 列出了启动 Hadoop 服务所采用的命令。随后使用清单 7 中的命令从 myNutch.com 抓取网页并解析,其中参数 “depth 3” 表示从网页根路径算起的链接深度;参数 “topN 10” 表示抓取器在每层需要获取的最大页面数目。开始抓取后,抓取器将在当前目录下创建新目录 crawl 作为工作目录。 清单 6 启动 Hadoop 服务
清单 7 抓取命令
对目标网站 targetWebApp 完成抓取后, 在 crawl 工作目录下产生了五个子目录: crawldb,linkdb,segments,indexes 和 index (见图 6)。数据库 crawldb 中包含页面的数目等;linkdb 包含页面在数据库中的链接,这是抓取器真正抓取网站时由页面的链接数目决定;Segments 数据库按照时间戳分为三个片断,每个片断的产生都经历了 generate/fetch/update 三个过程;Indexes 数据库包含了在 generate/fetch/update 过程中产生的 Lucene 索引;Index 数据库包含了经合并处理后的 Lucene 索引。 图 6 抓取器抓取结果 读者也可以使用工具 Luke 去查看 Lucene 索引。 借助 Luke,可以查看索引内容以及对索引查询。图 7 列出了 index 目录下的合并后的索引。 图 7 使用 Luke 查看 Lucene 索引 完成抓取后,现在将开发一个基于 Nutch 搜索 API 的应用 NutchApp,提供给用户作为搜索的接口。NutchApp 使用 Java 语言编写,其实现首先创建 NutchConfiguration 对象,然后创建 NutchBean。这个 NutchBean 实例将用来处理用户的搜索请求;根据请求参数,创建 query 对象,NutchBean 通过调用 search 方法来处理此 query 对象的请求。最终搜索结果以 Hits 集合。NutchApp 遍历此 Hits 集合并打印结果到标准输出。清单 8 列出了 NutchApp 的示例代码。 清单 8 NutchApp的示例代码
接下来我们来运行 NutchApp。首先编译 NutchApp.java 并打包。打包后的文件名为 NutchApp.jar。随后在 Nutch 命令下执行。见清单 9。 清单 9 编译、打包和执行 NutchApp
下面我们可以验证我们开发的 Nutch 搜索引擎的使用效果。在搜索页面搜索关键字输入“Nutch”,NutchApp 返回的搜索结果如清单 10 所示。其中包括概要和详细内容。 清单 10 NutchApp输出
通过本文的介绍,现在你已经知道如何使用 Nutch 开发集群式的搜索引擎,并使用此搜索引擎对目标网站进行抓取和分析结果,以及如何提供搜索接口来响应用户的搜索请求。事实上,搭建基于 Nutch 的搜索引擎是一个具有很大挑战性的工作,因为 Nutch 本身还在不断的发展之中,另外目标网站的结构复杂度也不尽相同。所以,针对互联网站点文档格式日益复杂的需求,接下来你还需要花一些精力关注 Nutch 高级特性的进展。 学习
|
发表评论
-
nutch1.4 环境变量设置
2012-04-06 12:52 1729Exception in thread "main& ... -
正则使用
2010-06-18 00:19 1139java正则表达式(java.Regex)HtmlParser ... -
nutch 1.0 读源码,过滤掉不正确的URL实现方法
2010-06-18 00:17 3401nutch 1.0 读源码,过滤掉不正确的URL实现方法: ... -
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputExnutch新发现,为以后备忘
2010-06-16 23:16 2298urls -dir mycrawl -depth 3 -top ... -
HTMLParser 解析html字符串,提取纯文本
2010-05-14 09:59 8327今天在群里问别人怎么提取文本,也没有具体告诉我用什么,只是说用 ... -
HTMLParser的两种使用方法[转]
2010-05-13 23:37 1944HTMLParser的两种使用方法 文章分类:Java编程 ... -
搜索引擎术语
2010-05-05 11:40 1434附录. 术语 B: 半结构化 ... -
影响Lucene索引速度原因以及提高索引速度技巧[转]
2010-04-25 00:11 2747影响Lucene索引速度原因以及提高索引速度技巧 关键字: ... -
如何配置compass的索引位置为相对路径
2009-09-01 19:28 1509Compass是对lucene进行封装 ... -
heritrix 基本介绍
2009-08-01 10:35 3915Heritrix使用小结 1. H ... -
我对HtmlParser 提取网页各属性的总结及示例说明
2009-07-08 13:50 1940/** * 属性过滤器 * @param parser ... -
数学之美 系列十三 信息指纹及其应用
2009-06-25 22:34 10412006年8月3日 上午 11:17:00 ... -
数学之美系列二十一 - 布隆过滤器(Bloom Filter)
2009-06-25 22:27 15172007年7月3日 上午 09:35:00 ... -
用HTMLParser提取URL页面超链接的一段代码(小试牛刀)
2009-06-06 16:54 7097用HTMLParser提取URL页面超 ... -
深入学习Heritrix---解析处理器(Processor)
2009-06-06 13:17 1630键字: heritrix processor 本节解析与 ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-06 10:02 1219Frontier是Heritrix最核心的组成部分之一,也是最 ... -
深入学习Heritrix---解析CrawlController
2009-06-06 10:00 1387当我们以Web UI方式使用Heritrix时,点击任务开始( ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-03 21:50 1521原创作者: pengranxiang 阅读:231次 ... -
lucene2.0+heritrix示例补充
2009-06-03 21:31 1547由于lucene2.0+heritrix一书示例用的网站( ... -
htmlparser 使用手册
2009-05-30 16:47 29232009-05-08 14:20 需要做一 ...
相关推荐
云计算环境下集群式搜索引擎技术研究的关键词包括云计算、云服务、数据服务、参考文献和专业指导。该研究聚焦于在云计算环境下对搜索引擎技术的集群式应用。以下为从文件中提取的知识点: 1. 物联网技术在数据中心...
它以Java编写,基于Lucene,集成了网页爬虫和搜索引擎功能。Nutch的工作流程包括两个主要部分:Crawler负责抓取网页并建立索引,Searcher则用于检索用户查询。Nutch的一大亮点是其插件框架,支持对各种网页内容的...
随着需求的增长,Cutting与Mike Cafarella合作,开发了Nutch,一个基于Lucene的开源搜索引擎项目,旨在提供类似Google的全网搜索功能。随着互联网的爆炸式增长,数据量激增,Google的GFS(Google File System)和...
Nutch 最终成为基于 Hadoop 和 Lucene 的搜索引擎平台。 Hadoop 在云计算领域扮演着重要角色。雅虎、Amazon、IBM 和 Google 等大公司都在其云计算解决方案中使用 Hadoop。例如,雅虎支持 Hadoop 开发,并创建了 Pig...
1997年,Cutting决定将他的理论研究成果付诸实践,利用Java开发了Lucene,这是一个里程碑式的创新,为后续的搜索引擎技术发展打开了新的大门。 随后,Cutting与Mike Cafarella共同启动了Nutch项目,这是一个开源...
本研究旨在全面深入分析分布式搜索引擎,并优化其中的索引构建策略。主要内容包括: 1. **深入研究Hadoop分布式平台**:分析Hadoop中的分布式文件系统HDFS和MapReduce编程模型。 2. **研究Nutch架构和技术体系**:...
Doug Cutting在Lucene的基础上开发了Nutch搜索引擎,后发展为Hadoop。 5. **Hadoop组件**: - HDFS(Hadoop分布式文件系统):提供高容错性和高吞吐量的数据存储。 - MapReduce:分布式计算框架,用于大规模数据...
- **Lucene/Nutch**:用于构建搜索引擎的工具集合。 - **HBase**:一个基于HDFS的分布式列式存储系统,适用于实时读写大表数据。 - **Solr**:一个高性能、全功能的搜索平台,支持分布式搜索和索引。 #### 五、...
9. **Hadoop分布式文件系统(HDFS)**: HDFS是为廉价硬件设计的分布式文件系统,起源于Apache Nutch搜索引擎项目。它提供高容错性和流式访问,适用于处理大规模文件,是Hadoop生态系统的基础。 这些技术共同构成了...
- 描述了Hadoop在Last.fm、Facebook、Nutch搜索引擎、Rackspace日志处理以及Cascading项目等实际应用中的作用。 这本书全面覆盖了Hadoop的各个方面,无论是初学者还是有经验的开发者,都能从中获取丰富的知识和...
1. **Hadoop概述**:Hadoop是基于Java开发的分布式计算框架,最初由Apache Nutch搜索引擎项目衍生而来。它主要由Hadoop Distributed File System (HDFS)和MapReduce两部分组成,旨在处理和存储海量数据。 2. **HDFS...
- **背景与起源**:Hadoop项目起源于搜索引擎公司Nutch对Google论文的研究成果,旨在解决大规模数据处理的问题。 - **架构与组成**:Hadoop的核心是HDFS(Hadoop Distributed File System)和MapReduce。HDFS用于...
- **网页爬虫**: 介绍了Hadoop如何支持Nutch搜索引擎的网页爬虫功能。 **14.4 Hadoop用于Rackspace的日志处理** - **日志分析**: 说明了Hadoop如何处理Rackspace的大量日志数据。 **14.5 Cascading项目** - **...