星期日, 十一月 26, 2006

Nutch结构概要

Nutch的工作分为两个阶段:抓取和搜索。抓取阶段取得网页并把他们处理成倒排的索引,后面的搜索阶段的工作基于这些索引来进行。

我按照Nutch Tutorial中对Intranet搜索的介绍,抓取了两个网站上的数据。生成了如下的文件结构:

Nutch的抓取系统使用Nutch的“CrawlTool(CrawTool.java)”工具以及一些列相关工具来建立和维护上面这几类数据结构,包括“web database”、一系列“segment”以及“index”。

Web 数据库(web database,或者WebDB),是用来保存抓取得Web图(Web Graph)的持久化的数据结构。只要被抓取的Web页面还存在,WebDB就会一直存在。WebDB只在抓取过程中起作用,并不参与搜索的过程。 WebDB保存两类实体:页面(page)和链接(link)。一个页面就相对于Web上的一个网页,网页的URL和内容的MD5哈希码被存储在页面中,同时,网页上的链接数、抓取信息以及计算的网页的权重(score)都被存储在页面中。而一个链接则表示两个网页之间链接。WebDB中的Web图就是由页面和链接组成,页面是节点,链接是边。

一个片断(Segment)是抓取器在一次抓取中取回和索引的网页。如上图所示,一个fetchlist是从WebDB中生成的URL列表,将由抓取器去抓取。

而索引则是系统所抓回的所有网页内容的倒排索引,是由多个片断融合而成。Nutch使用Lucene进行索引,所以所有的Lucene工具和API都可以在 Nutch生成的索引上工作。要注意的是,Lucene中也有片断(segment)这种说法,不过他和Nutch片断是不一样的。Lucene片断是 Lucene索引的一部分,而Nutch片断只是在WebDB的抓取和索引中用到,并不是最后的索引。

没有评论: