`
江南白衣
  • 浏览: 550785 次
  • 来自: 广州
社区版块
存档分类
最新评论

Nutch 0.8笔记--Google式的搜索引擎实现

阅读更多

    作者:江南白衣

    Nutch是一个基于Lucene,类似Google的完整网络搜索引擎解决方案,基于Hadoop的分布式处理模型保证了系统的性能,类似Eclipse的插件机制保证了系统的可客户化,而且很容易集成到自己的应用之中。

    Nutch 0.8 完全使用Hadoop重写了骨干代码,另外很多地方作了合理化修正,非常值得升级。

1.Nutch 0.8 的安装与运行

nutch 0.7.2的中文安装文档满街都是,nutch 0.8的安装文档见Tutorial (0.8) , 要注意两点:

一是 crawl命令里的urls参数从指定文件变为了指定目录, 即原来的urls 要改存到urls/foo 里。

二是 nutch-default.xml里http.agent.name属性默认为空,必须在nutch-site.xml中为该属性设值,否则会出错。

注意nutch 爬行时的信息用log4j输出在/logs 目录下了,默认不再直接输出到屏幕,除非你在配置文件里设fetcher.verbose为true。

Luke(http://www.getopt.org/luke) 是一个必备的索引阅读工具。

另外,nutch需要在unix下奔跑,如果要装在windows上,大家可以先装个cygwin。(下载它的setup.exe 在线安装很快装完)。

最后,nutch 0.8的recawl 脚本也不同了。

2.Nutch You should know 

2.1 一份文档

nutch的文档不多,而且多是安装文档,要深入nutch,就必须一字不漏的阅读:

Introduction to Nutch, Part 1 Crawling  和 Introduction to Nutch, Part 2 Searching

然后就是看源码了,好在nutch的源码非常均匀,简短,没有花哨的技巧,很容易把事情看明白。

2.2 三个目录

首先理解nutch的三个数据目录:

1.crawdb,linkdb 是web link目录,存放url 及url的互联关系,作为爬行与重新爬行的依据,页面默认30天过期。

2.segments 是主目录,存放抓回来的网页。页面内容有bytes[]的raw content 和 parsed text的形式。nutch以广度优先的原则来爬行,因此每爬完一轮会生成一个segment目录。

3.index 是lucene的索引目录,是indexs里所有index合并后的完整索引,注意索引文件只对页面内容进行索引,没有进行存储,因此查询时要去访问segments目录才能获得页面内容。

2.3 爬行过程

爬行过程在Introduction to Nutch, Part 1 Crawling 里已有详细说明,或许直接看Crawl类来理解爬行的过程。

这里有一幅更直观的图:

Nutch用入口地址,地址正则表达式,搜索深度三种形式来限制

因为使用了Hadoop(下篇再讲),Nutch的代码都按照Hadoop的模式来编写以获得分布式的能力,因此要先了解一下Hadoop,明白它Mapper,Rerducer, InputFormat, OutputFormat类的作用才能更好的阅读。

1.Fetcher类, 在run()里多线程运行FetcherThread,并调用恰当的Protocol插件(支持http,ftp等协议)获取内容,调用恰当的Parser将内容分析为文本,然后把内容放到FetcherOutput类里,最后由FetcherOutputFormat类定义写盘到segments的过程。

2.Indexer类,应用hadoop遍历所有Segments 目录,将parseData文件序列化成ParseData类,从中获得各种资料然后调用插件进行索引,最后仍然由ouputFormat类完成写入索引的工作。

注意,如果你仅想使用Nutch的爬虫,而不是其索引功能,可以仿照Indexer重写自己的实现,比如把segments内容直接搬进数据库。

3.Nutch 每条索引记录的字段

url: 作为唯一标标识值,由BasicIndexingFilter类产生。

segment:由Indexer类产生。Nutch抓回来的页面内容放在segments目录,lucene只会索引,不会store原文内容,因此在查询时要以segment与url作为外键,由FetchedSegments类根据hitsDetail从segments目录获得content。

boost:优先级,由Indexer类调用插件计算产生。

title:显示标题,在BasicIndexingFilter插件中被索引和存储。

content: 主要的被搜索项,在BasicIndexingFilter插件中被索引。

2.4 搜索过程

Nutch提供了一个Fascade的NutchBean类供我们使用,一段典型的代码如下

 
    NutchBean bean = new NutchBean();
    Query query 
= Query.parse(args[0]);
    Hits hits 
= bean.search(query, NUM_HITS,"title",true);

    
for (int i = 0; i < hits.getLength(); i++) {
      Hit hit 
= hits.getHit(i);
      HitDetails details 
= bean.getDetails(hit);

      String title 
= details.getValue("title");
      String url 
= details.getValue("url");
      String summary 
=bean.getSummary(details, query);
    }
这里NutchBean为我们做了几样事情:

一是按Title field来排序

二是支持分布式查询,如果有配置servers,就会使用hadoop的IPC系统,调用所有server上的nutchBeans,最后规约出总的结果。

三是每个站点只显示分数最高的一页,如果用户还想看同站的其他结果,就需要访问MoreHitsExculde[]。

四是生成Summary,读取segments目录,按segments和url 获得content, 并按一定算法抽取出包含关键字的文档片断。

3. 修改源码或编写插件

Nutch的源码很容易修改和重新编译,注意新编译的class要压回nutch-0.8.job(实际是一个jar)才能生效。

Nutch的插件机制及度类似Eclipse, 详看http://wiki.apache.org/nutch/WritingPluginExample,只要实现某个插件接口,然后在plugins.xml里定义class,扩展点和依赖的jar,如

<plugin   id="index-basic"   version="1.0.0"   provider-name="nutch.org">
   <runtime>
      <library name
="index-basic.jar">
         <export name
="*"/>
      </library>
   </runtime>
   <requires>
      <import plugin
="nutch-extensionpoints"/>
   </requires>
   <extension id
="org.apache.nutch.indexer.basic"
             name
="Nutch Basic Indexing Filter" 
             point
="org.apache.nutch.indexer.IndexingFilter">
      <implementation id
="BasicIndexingFilter"  class="org.apache.nutch.indexer.basic.BasicIndexingFilter"/>
   </extension>
</plugin>

 

最后是八卦,Dedian同志翻译的Doug Cutting 访谈录 -- 关于搜索引擎的开发



分享到:
评论

相关推荐

    Nutch 0.8笔记NUTCHNUTCH

    【Nutch 0.8 知识点详解】 ...总之,Nutch 0.8 是一个强大的搜索引擎框架,利用 Hadoop 提供了分布式爬取和索引能力。通过理解其核心组件、目录结构和爬行流程,开发者可以有效地构建和定制自己的搜索引擎解决方案。

    apache-nutch-2.3.1-src.tar.gz

    Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行高效检索。Nutch 是由 Apache Software Foundation 维护,它提供了完整的网络爬虫解决方案,包括数据采集、预处理、...

    apache-nutch-1.4-bin.tar.gz

    Apache Nutch 是一款高度可扩展的开源搜索引擎,它主要用于网络数据的抓取和索引。Nutch 的设计目的是为了提供一种高效、可靠且易于维护的解决方案,尤其适用于大数据量的互联网内容处理。在这个"apache-nutch-1.4-...

    apache-nutch-1.3-src.tar.gz_nutch_nutch-1.3.tar.gz

    Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便进行全文搜索。Nutch 1.3 是该项目的一个稳定版本,提供了许多关键功能和改进。这个源码包 "apache-nutch-1.3-src.tar.gz" 和 ...

    apache-nutch-1.5.1-bin.tar.gz

    Nutch是一款刚刚诞生的完整的开源搜索引擎系统,可以结合数据库进行索引,能快速构建所需系统。Nutch 是基于Lucene的,Lucene为 Nutch 提供了文本索引和搜索的API,所以它使用Lucene作为索引和检索的模块。Nutch的...

    nutch配置nutch-default.xml

    nutch配置nutch-default.xml

    Lucene2.0+Nutch0.8 API帮助文档(CHM格式)

    《Lucene2.0+Nutch0.8 API帮助文档》是一个综合性的技术资源,它包含了对Lucene 2.0和Nutch 0.8这两个关键的开源搜索引擎库的详细接口和功能说明。这两个组件在信息检索、全文搜索以及网络爬虫领域有着广泛的应用。 ...

    apache-nutch-1.4-src.tar.gz_nutch_搜索引擎

    Apache Nutch 是一款高度可扩展的开源全文搜索引擎框架,它为构建自定义的网络爬虫和搜索引擎提供了强大的工具集。Nutch 的设计目标是处理大量网页数据,进行高效的抓取、索引和搜索操作。在“apache-nutch-1.4-src....

    apache-nutch-1.7-src.tar.gz

    Apache Nutch是一个强大的开源搜索引擎项目,它主要用于网络爬虫和数据索引。Nutch是由Apache软件基金会开发并维护的,其目标是提供一种可扩展、可靠的全网搜索解决方案。Nutch 1.7是该项目的其中一个稳定版本,包含...

    apache-nutch-2.3.1-src

    apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译 apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译

    apach-nutch-1.9-bin.tar.gz

    Apache Nutch 是一个开源的网络爬虫框架,用于构建大规模的全文搜索引擎。Nutch 1.9 是一个较旧但稳定的版本,相比2.x系列,它不需要依赖像HBase这样的非关系型数据库,因此在部署和维护上可能更加简单。这个压缩包 ...

    apache-nutch-1.4-bin.tar.gz.part2

    apache-nutch-1.4-bin.tar.gz.part2

    nutch-1.0-dev.jar

    nutch-1.0-dev.jar nutch devlope

    apache-nutch-1.6-src.tar.gz

    Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行高效的信息检索。Nutch 1.6 是该项目的一个稳定版本,提供了丰富的功能和良好的性能。这个`apache-nutch-1.6-src.tar...

    apache-nutch-1.4-bin.part2

    apache-nutch-1.4-bin.part2

    apache-nutch-1.4-bin.part1

    apache-nutch-1.4-bin.part1

    apache-nutch-1.6-bin.tar.gz最新版

    nutch不用安装,是个应用程序,下载后为nutch-1.6.tar.gz,双击桌面上的cygwin快捷方式;执行以下命令: $ cd D:/Downloads/Soft $ tar zxvf nutch-1.0.tar.gz 在e盘下面出现nutch-0.9文件夹说明解压成功了.然后环境...

    apache-nutch-1.4-bin.tar.gz.part1

    apache-nutch-1.4-bin.tar.gz.part1

    Nutch 初体验 - DBA Notes

    Nutch 初体验 - DBA Notes

Global site tag (gtag.js) - Google Analytics