`
biaowen
  • 浏览: 74407 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Nutch搜索引擎系统架构

阅读更多

下面分析一下Nutch搜索引擎系统的特点。

一、系统架构

  总体上Nutch可以分为2个部分:抓取部分和搜索部分。抓取程序抓取页面并把抓取回来的数据做成反向索引,搜索程序则对反向索引搜索回答用户的请求。抓 取程序和搜索程序的接口是索引,两者都使用索引中的字段。抓取程序和搜索程序可以分别位于不同的机器上。下面详细介绍一下抓取部分。

抓取部分:

  抓取程序是被Nutch的抓取工具驱动的。这是一组工具,用来建立和维护几个不同的数据结构: web database, a set of segments, and the index。下面逐个解释这三个不同的数据结构:

    1、The web database, 或者WebDB。这是一个特殊存储数据结构,用来映像被抓取网站数据的结构和属性的集合。WebDB 用来存储从抓取开始(包括重新抓取)的所有网站结构数据和属性。WebDB 只是被 抓取程序使用,搜索程序并不使用它。WebDB 存储2种实体:页面 和 链接。页面 表示 网络上的一个网页,这个网页的Url作为标示被索引,同时建立一个对网页内容的MD5 哈希签名。跟网页相关的其它内容也被存储,包括:页面中的链接数量(外链接),页面抓取信息(在页面被重复抓取的情况下),还有表示页面级别的分数 score 。链接 表示从一个网页的链接到其它网页的链接。因此 WebDB 可以说是一个网络图,节点是页面,链接是边。

    2、Segment 。这是网页的集合,并且它被索引。Segment的Fetchlist 是抓取程序使用的url列表,它是从 WebDB中生成的。Fetcher 的输出数据是从 fetchlist 中抓取的网页。Fetcher的输出数据先被反向索引,然后索引后的结果被存储在segment 中。 Segment的生命周期是有限制的,当下一轮抓取开始后它就没有用了。默认的 重新抓取间隔是30天。因此删除超过这个时间期限的segment是可以的。而且也可以节省不少磁盘空间。Segment 的命名是日期加时间,因此很直观的可以看出他们的存活周期。

    3、The index。索引库是反向索引所有系统中被抓取的页面,它并不直接从页面反向索引产生,而是合并很多小的segment的索引产生的。Nutch 使用 Lucene 来建立索引,因此所有Lucene相关的工具 API 都用来建立索引库。需要说明的是Lucene的segment 的概念和Nutch的segment概念是完全不同的,不要混淆。简单来说 Lucene 的 segment 是 Lucene 索引库的一部分,而Nutch 的Segment是WebDB中被抓取和索引的一部分。

抓取过程详解:

      抓取是一个循环的过程:抓取工具从WebDB中生成了一个 fetchlist 集合;抽取工具根据fetchlist从网络上下载网页内容;工具程序根据抽取工具发现的新链接更新WebDB;然后再生成新的fetchlist;周而 复始。这个抓取循环在nutch中经常指: generate/fetch/update 循环。

    一般来说同一域名下的 url 链接会被合成到同一个 fetchlist。这样做的考虑是:当同时使用多个工具抓取的时候,不会产生重复抓取的现象。Nutch 遵循 Robots Exclusion Protocol, 可以用robots.txt 定义保护私有网页数据不被抓去。

    上面这个抓取工具的组合是Nutch的最外层的,也可以直接使用更底层的工具,自己组合这些底层工具的执行顺序达到同样的结果。这是Nutch吸引人的地方。下面把上述过程分别详述一下,括号内就是底层工具的名字:

    1、创建一个新的WebDB (admin db -create)。

    2、把开始抓取的跟Url 放入WebDb (inject)。

    3、从WebDb的新 segment 中生成 fetchlist (generate)。

    4、根据 fetchlist 列表抓取网页的内容 (fetch)。

    5、根据抓取回来的网页链接url更新 WebDB (updatedb)。

    6、重复上面3-5个步骤直到到达指定的抓取层数。

    7、用计算出来的网页url权重 scores 更新 segments (updatesegs)。

    8、对抓取回来的网页建立索引(index)。

    9、在索引中消除重复的内容和重复的url (dedup)。

    10、合并多个索引到一个大索引,为搜索提供索引库(merge)。

      在创建了一个新的WebDB后,抓取循环 generate/fetch/update 就根据最先第二步指定的根 url 在一定周期下自动循环了。当抓取循环结束后,就会生成一个最终的索引(第7步到第10步)。需要说明的是:上面第 8 步中每个 segment 的索引都是单独建立的,之后才消重(第9步)。第10步就是大功告成,合并单独的索引到一个大索引库。

    Dedup 工具可以从 segment 的索引中去除重复的url。因为 WebDB 中不允许重复的url , 也就是说 fetchlist 中不会有重复的url,所以不需要对 fetchlist 执行 dedup 操作。上文说过,默认的抓取周期是30天,如果已经生成的旧 fetch 没有删除,而又生成了新的fetch 这是还是会出现重复的url的。当只有一个抓取程序运行的时候是不会发生上述情况的。

    从上面的介绍可以看出,一般情况下我们只要从头执行的程序就可以了,不需要接触底层的工具。但是搜索引擎有很多“意外”,很多的时间需要花费在维护上,所以底层的工具也是需要掌握的。

分享到:
评论

相关推荐

    lucene+nutch搜索引擎开发源码1

    《lucene+nutch搜索引擎开发源码1》是一个包含开源搜索引擎项目Lucene和Nutch源代码的压缩包,主要针对搜索引擎开发的学习和实践。这个压缩包是书籍《lucene+nutch搜索引擎开发》的一部分,由于源码量较大,因此分为...

    Lucene nutch 搜索引擎 开发 实例 源码

    《Lucene与Nutch搜索引擎开发实例详解》 在信息技术领域,搜索引擎已经成为不可或缺的一部分,它们能够高效地处理海量数据,帮助用户快速找到所需信息。本文将深入探讨基于Java的开源搜索引擎框架——Lucene和Nutch...

    nutch框架 搜索引擎

    ### Nutch框架:一个灵活与可扩展的开源搜索引擎 #### 基本概念与起源 Nutch是一款由Nutch组织发起、多个实验室如CommerceNet Labs共同研发的开源Web搜索引擎。其设计初衷旨在提供一个透明、公正的全球网络搜索...

    Lucene.Nutch搜索引擎开发

    《Lucene.Nutch搜索引擎开发》是一本专注于介绍如何利用Lucene和Nutch构建搜索引擎的书籍。这本书的内容深入浅出,适合对搜索引擎技术感兴趣的开发者阅读。Lucene是一个高性能、全文本搜索库,而Nutch则是一个基于...

    Lucene+Nutch搜索引擎开发(配套光盘资源)

    《Lucene+Nutch搜索引擎开发》是一本专注于搜索引擎技术的书籍,配套光盘资源为学习者提供了丰富的实践材料,尤其对于想要深入理解Nutch搜索引擎开发的读者来说,这是一份不可多得的学习资料。Nutch是基于Apache ...

    Nutch搜索引擎培训讲义

    ### Nutch 搜索引擎培训讲义关键知识点...最新的Nutch 2.0版本在架构和性能上有了显著提升,更加适合大规模分布式环境下的搜索引擎建设。对于学习者而言,了解各版本的特点和技术细节对于掌握Nutch的使用方法至关重要。

    lucene+nutch搜索引擎光盘源码(1-8章)

    《lucene+nutch搜索引擎光盘源码(1-8章)》是一套全面解析Lucene和Nutch搜索引擎技术的源代码教程,涵盖了从基础到进阶的多个层面。这套资源包含8个章节的源码,由于文件大小限制,被分成了多个部分进行上传。 ...

    开发基于 Nutch 的集群式搜索引擎

    Nutch搜索引擎的核心功能包括网页抓取、内容解析、索引建立以及查询服务。其中,网页抓取(或称爬虫)模块负责从网络上抓取网页内容;内容解析模块用于提取网页中的文本信息;索引建立模块则将解析后的数据组织成...

    基于Nutch的电力行业全文搜索引擎的研究与设计.pdf

    因此,本文在开源的Nutch 搜索引擎架构的基础, 通过构建电力行业词典,利用改进的空间向量算法对抓取内容的相关度进行计算,并对相关内容进行过滤,结合主流的PageRank算法对搜索结果综合排序,并嵌入访问控制模块...

    nutch开发资料 搜索引擎

    Nutch是Apache软件基金会的一个开源项目,主要用于构建网络搜索引擎。这个开发资料压缩包包含了与Nutch相关的源代码和可能的配置文件,可以帮助开发者深入了解和学习Nutch的工作原理以及如何进行定制化开发。以下是...

    Nutch公开课从搜索引擎到网络爬虫

    Apache Nutch是一个用Java...总结来说,Nutch作为一个网络爬虫和搜索引擎项目,不仅在技术上有所突破,为大型搜索引擎提供了可扩展的架构,同时也成为了学习大数据技术,特别是Hadoop生态系统中不可或缺的教学案例。

    基于Java的搜索引擎Nutch中文搜索技术研究

    经过一系列实验验证,本文提出的中文搜索技术方案显著提高了Nutch搜索引擎对于中文信息的处理能力。具体体现在以下几个方面: - **搜索精度**:采用新的分词技术和语法分析方法后,搜索结果的相关性得到了明显提升。...

    nutch+lucene开发自己的搜索引擎ch3.pdf

    综上所述,Nutch和Lucene是构建搜索引擎的强大工具,通过了解它们的特点和优势,可以帮助开发者有效地开发出符合需求的搜索引擎系统。无论是对于学术研究还是商业应用,这些工具都提供了坚实的技术基础和支持。

    分布式搜索引擎nutch开发

    Nutch是一款开源的、基于Java实现的全文搜索引擎,它主要用于构建大规模的网络爬虫系统,并提供了对抓取的网页进行索引和搜索的功能。Nutch与Hadoop紧密集成,能够充分利用分布式计算的优势,处理海量数据。在本篇中...

    基于Java Nutch的搜索引擎设计与实现毕业设计论文 共52页 2W+字.pdf

    Nutch是一个开源的Web爬虫项目,它为构建大规模搜索引擎提供了基础架构。以下是论文的核心知识点: 1. **第四代搜索引擎**:与传统的搜索引擎相比,第四代搜索引擎通过引入更精确的分类和智能化策略,如特征提取、...

    Nutch技术的主题搜索引擎实现_李东海

    实现一个高效的Nutch搜索引擎需要对系统进行适当的配置和优化,包括设置抓取频率、调整索引参数、优化查询性能等。李东海的工作可能涵盖了这些方面,旨在提供一个针对特定需求的定制化解决方案。 9. **应用与实践*...

    nutch架构图

    Nutch是Apache软件基金会开发的一款开源的Web爬虫系统,主要设计用于收集、索引和检索互联网上的数据。Nutch的架构图可以帮助我们理解其工作流程和组件间的交互,这对于学习和入门Nutch至关重要。 首先,让我们从...

    实验报告(利用Nutch和IKanalyzer构造中文分词搜索引擎)

    实验过程中,不仅涉及了搜索引擎的基础架构,还涵盖了Linux环境的使用、网页爬虫技术、文本处理与分析,以及分词算法的实践应用。这些知识点对于理解和开发自己的搜索引擎系统具有重要意义。通过Nutch和IKAnalyzer的...

Global site tag (gtag.js) - Google Analytics