`
lmx800
  • 浏览: 29861 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论
阅读更多
21世纪是信息的时代,也是网络的时代。不断通畅与进步的互联网在给人们带来浩如烟海的网络信息的同时,也容易使人在查询自己所需的有用的相关信息时陷入 迷茫。搜索引擎正是为了满足人们网络信息搜索应运而生的网络工具,它是互联网信息查询的导航针。现在的商业搜索引擎不少,但都是保密的,不便研究。而 Nutch 是一个开源Java 实现的搜索引擎,它提供了我们运行自己的搜索引擎所需的全部工具。

    Nutch是开放源代码的,因此任何人都可以查看他的排序算法是如何工作的。商业的搜索引擎排序算法都是保密的,我们无法知道为什么搜索出来的排序结果是 如何算出来的。更进一步,一些搜索引擎允许竞价排名,比如百度,这样的索引结果并不是和站点内容相关的。因此 Nutch 对学术搜索和政府类站点的搜索来说,是个好选择。因为一个公平的排序结果是非常重要的。

  了解一个大型分布式的搜索引擎如何工作是一件让人很受益的事情,但是我们并没有google的源代码,因此学习搜索引擎Nutch是个不错的选择。 Nutch的核心部分目前已经被重新用 Map Reduce 实现,而Map Reduce 是一个分布式的处理模型,最先是从 Google 实验室提出来的。

    Nutch吸引了很多研究者,他们非常乐于尝试新的搜索算法,因为对Nutch 来说,这是非常容易实现扩展的。Nutch 非常灵活,它可以被很好地客户订制并集成到应用程序中。使用插件机制,Nutch可以作为一个搜索不同信息载体的搜索平台。当然,最简单的就是集成 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的。当只有一个抓取程序运行的时候是不会发生上述情况的。

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

相关推荐

    Nutch搜索引擎(1-5期)

    Nutch搜索引擎·Nutch简介及安装(第1期) Nutch搜索引擎·Solr简介及安装(第2期) Nutch搜索引擎·Nutch简单应用(第3期) Nutch搜索引擎·Eclipse开发配置(第4期) Nutch搜索引擎·Nutch浅入分析(第5期)

    Lucene+Nutch搜索引擎开发.王学松源代码

    《Lucene+Nutch搜索引擎开发:王学松源代码解析》 在信息技术日新月异的今天,搜索引擎已经成为了人们获取信息的重要工具。Lucene和Nutch是两个在开源社区广泛使用的搜索引擎技术,它们为开发者提供了构建高效、可...

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

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

    Nutch搜索引擎·Nutch浅入分析(第5期)

    首先,Nutch搜索引擎的基本组成涵盖了互联网搜索引擎的五个主要环节,它们分别是网页信息的抓取、网页内容分析、网页索引建立、网页检索结果排序以及网页检索工具与接口。每个环节都有其独特的功能和作用,共同构成...

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

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

    Lucene+Nutch搜索引擎开发

    在探讨“Lucene+Nutch搜索引擎开发”这一主题时,我们需要深入了解Lucene与Nutch这两个开源项目的功能、工作原理以及如何将它们结合起来构建一个高效的搜索引擎。 ### Lucene简介 Lucene是一个高性能、全功能的...

    Nutch搜索引擎的页面排序修改方法研究.kdh

    Nutch是一个优秀的开放源代码的Web...分析开源搜索引擎Nutch代码,研究了Nutch的页面排序方法。在Nutch原有的结构基础上提出了3种修改Nutch 排序的方法,对每种方法的实现进行了阐述,最后对这些方法的特点进行了比较

    lucene+nutch搜索引擎

    《Lucene+Nutch搜索引擎》是一本深入探讨如何利用开源搜索引擎技术构建高效检索系统的书籍。它主要围绕Apache Lucene和Nutch这两个核心项目展开,旨在帮助读者理解和掌握搜索引擎的基础原理及其实现方法。 Lucene是...

    搜索引擎nutch配置

    **Nutch搜索引擎配置详解** Nutch是一款开源的网络爬虫软件,主要用于收集、索引和搜索互联网上的数据。它在大数据领域中占有重要地位,尤其对于构建自定义搜索引擎的项目非常实用。Nutch的设计理念是模块化,允许...

    基于lucene和nutch的开源搜索引擎资料集合

    [硕士论文]_基于Nutch的垂直搜索引擎的分析与实现.pdf 一个例子学懂搜索引擎(lucene).doc 中文搜索引擎技术揭密.doc 九大开源搜索引擎介绍.txt 基于Nutch的搜索引擎技术.pdf 基于开源工具搭建小型搜索引擎.pdf 整合...

    Lucene.Nutch搜索引擎开发

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

    Nutch搜索引擎·Nutch简单应用(第3期)

    Nutch搜索引擎的应用不仅限于简单的数据抓取和索引,它还能帮助开发者进行网页内容的深度分析,支持复杂网络数据的高效处理。对于希望构建个人搜索引擎或对互联网内容进行深入研究的用户来说,Nutch是一个非常实用的...

    nutch搜索引擎数据获取

    ### Nutch搜索引擎数据获取 #### 一、基本原理 ##### 1.1 体系结构设计 网络蜘蛛在Nutch搜索引擎中的实现通常包含了三个关键模块: 1. **HTTP下载模块**:该模块负责处理HTTP请求,从指定的URL下载网页内容,并...

    Lucene+nutch搜索引擎开发(源代码)

    《Lucene+nutch搜索引擎开发(源代码)》是关于构建搜索引擎的一个重要资源,它结合了Apache Lucene和Nutch两大开源技术,旨在帮助开发者深入了解搜索引擎的工作原理并实践相关开发。Lucene是一个强大的全文检索库,...

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

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

    lucene+nutch搜索引擎(1-11章源码)

    《深入剖析Lucene+Nutch搜索引擎》 在信息技术领域,搜索引擎是不可或缺的一部分,它极大地提高了我们获取网络信息的效率。Lucene和Nutch是两个在开源社区中广泛使用的搜索引擎技术,它们各自扮演着重要的角色。本...

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

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

Global site tag (gtag.js) - Google Analytics