标签:
Nutch 是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。
nutch是开放源代码的,因此任何人都可以查看他的排序算法是如何工作的。商业的搜索引擎排序算法都是保密的,我们无法知道为什么搜索出来的排序结果是如何算出来的。更进一步,一些搜索引擎允许竞价排名,比如百度,这样的索引结果并不是和站点内容相关的。因此 nutch 对学术搜索和政府类站点的搜索来说,是个好选择,因为一个公平的排序结果是非常重要的。
学习搜索引擎Nutch,了解一个大型分布式的搜索引擎如何工作是一件让人很受益的事情。在写Nutch的过程中,从学院派和工业派借鉴了很多知识:比如,Nutch的核心部分目前已经被重新用 Map Reduce 实现了。Map Reduce 是一个分布式的处理模型,最先是从 Google 实验室提出来的。并且 Nutch 也吸引了很多研究者,他们非常乐于尝试新的搜索算法,因为对Nutch 来说,这是非常容易实现扩展的。
Nutch 是非常灵活的:他可以被很好的客户订制并集成到你的应用程序中,使用Nutch 的插件机制,Nutch 可以作为一个搜索不同信息载体的搜索平台。当然,最简单的就是集成Nutch到你的站点,为你的用户提供搜索服务
nutch的目标
nutch致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, nutch必须能够做到:
• 每个月取几十亿网页 • 为这些网页维护一个索引 • 对索引文件进行每秒上千次的搜索 • 提供高质量的搜索结果 • 以最小的成本运作
nutch和luene
Lucene 不是完整的应用程序,而是一个用于实现全文检索的软件库。 Nutch 是一个应用程序,可以以 Lucene 为基础实现搜索引擎应用。
Lucene为 Nutch 提供了文本索引和搜索的API。一个常见的问题是;我应该使用Lucene还是Nutch?最简单的回答是:如果你不需要抓取数据的话,应该使用Lucene。常见的应用场合是:你有数据源,需要为这些数据提供一个搜索页面。在这种情况下,最好的方式是直接从数据库中取出数据并用Lucene API建立索引。
nutch基本原理分析
1 nutch的基本组成
nutch作为一个搜索引擎,其基本组成也同其他搜索引擎一样。简单的说,包括爬虫,索引和搜索三部分。
2 nutch工作流程
在前面的nutch初体验中,我们就是按照nutch的工作流程来进行的,现在总结如下:
1) 建立初始URL集 2) 将URL集注入crawldb数据库---inject 3) 根据crawldb数据库创建抓取列表---generate 4) 执行抓取,获取网页信息---fetch 5) 更新数据库,把获取到的页面信息存入数据库中---updatedb 6) 重复进行3~5的步骤,直到预先设定的抓取深度。---这个循环过程被称为“产生/抓取/更新”循环 7) 根据sengments的内容更新linkdb数据库---invertlinks 8) 建立索引---index 9) 用户通过用户接口进行查询操作
10) 将用户查询转化为lucene查询
11) 返回结果 其中,1~6属于爬虫部分;7、8属于索引部分;9~11属于查询部分。 (注: 进行内部网爬行时执行的crawl操作,实质上也是执行的以上一系列操作,这一点从它的抓取日志上可以看出)
nutch工作流程分析
爬虫-工作策略
其工作策略一般则可以分为累积式抓取(cumulative crawling)和增量式抓取(incremental crawling)两种。
累积式抓取是指从某一个时间点开始,通过遍历的方式抓取系统所能允许存储和处理的所有网页。在理想的软硬件环境下,经过足够的运行时间,累积式抓取的策略可以保证抓取到相当规模的网页集合。但由于Web数据的动态特性,集合中网页的被抓取时间点是不同的,页面被更新的情况也不同,因此累积式抓取到的网页集合事实上并无法与真实环境中的网络数据保持一致。
与累积式抓取不同,增量式抓取是指在具有一定量规模的网络页面集合的基础上,采用更新数据的方式选取已有集合中的过时网页进行抓取,以保证所抓取到的数据与真实网络数据足够接近。进行增量式抓取的前提是,系统已经抓取了足够数量的网络页面,并具有这些页面被抓取的时间信息。
面向实际应用环境的网络蜘蛛设计中,通常既包括累积式抓取,也包括增量式抓取的策略。累积式抓取一般用于数据集合的整体建立或大规模更新阶段;而增量式抓取则主要针对数据集合的日常维护与即时更新。
在确定了抓取策略之后,如何从充分利用网络带宽,合理确定网页数据更新的时间点就成了网络蜘蛛运行策略中的核心问题。
工作流程分析
1.建立初始URL集
初始URL集的建立有两种方式:超链接和站长提交
超链接:机器人程序根据网页链到其他网页中的超链接,就像日常生活中所说的“一传十,十传百……”一样,从少数几个网页开始.连到数据库上所有到其他网页的链接。理论上,若网页上有适当的超连结,机器人便可以遍历绝大部分网页。 站长提交:在实际运行中,爬虫不可能抓取到所有站点,为此,网站站长可以向搜索引擎进行提交,要求收录,搜索引擎经过核查之后,便将该网站加入到URL集合中,进行抓取。
2.inject
inject操作调用的是nutch的核心包之一crawl包中的类injector inject操作主要作用 将URL集合进行格式化和过滤,消除其中的非法URL,并设定URL状态(UNFETCHED),按照一定方法进行初始化分值;将URL进行合并,消除重复的URL入口; 将URL及其状态、分值存入crawldb数据库,与原数据库中重复的则删除旧的,更换新的。 inject操作结果:crawldb数据库内容得到更新,包括URL及其状态。
3.generate
generate操作调用的是crawl包中的类generator。
generate操作主要作用 从crawldb数据库中将URL取出并进行过滤对URL进行排序,通过域名、链接数和一种hash算法综合进行降 序排列\将排列列表写入segment
4.fetch
fetch操作调用的是fetcher包中的类fercher。 fetch操作主要作用 执行抓取,按照segment文件夹下的抓取列表进行抓取过程中,页面的URL地址可能因为链接发生改变,从而需要更新URL地址抓取采用多线程方式进行,以提高抓取速度 fetch操作过程中调用了parse操作 fetch操作结果:将页面内容抓取下来,存于segment目录下
5.parse
parse操作调用的是parse包中的类parsesegment。 parse操作主要作用 解析segment中由fetch得到的页面,并进行整理,将页面分成为 parse-date和parse-text parse-date中保存的是页面的题名、作者、日期、链接等内容 parse-text中保存的是页面的文本内容 parse操作结果:将fetch得到的页面解析为text和data,存于segment 目录下
6.updatedb
updatedb操作调用的是crawl包中的类crawldb updatedb操作主要作用 根据segment目录下fetch文件夹和parse文件夹中的内容,对crawldb 进行更新,增加新的URL,更换旧的URL updatedb操作结果:更新了crawldb数据库,为下一轮抓取做准备
标签:
原文地址:http://www.cnblogs.com/hwaggLee/p/4911511.html