-
下面分析一下
Nutch
搜索引擎系统的特点。
一、系统架构
总体上
Nutch
可以分为
2
个部分:
抓取部分
和搜索部分。
抓取程序抓取页面并
把抓取回来的数据做成反向索
引,搜索程序则对反向索引搜索回答用户的请求。
抓取程序和搜索程序的接口是索引,<
/p>
两者都使用索引中的字段。
抓取程序和搜索
程序可以分别位于不同的机器上。下面详细介绍一下抓取部分。
抓取部分:
< br>抓取程序是被
Nutch
的抓取工具驱动的。
这是一组工具,
用来建立和维护几个
不同的数据结
构:
web database
,
a set of segments
,
and the i
ndex
。下
面逐个解释这三个不同的数据结构:
1
、
The
web database
,或者
WebDB
< br>。这是一个特殊存储数据结构,用来映
像被抓取网站数据的结构和属性的集合。<
/p>
WebDB
用来存储从抓取开始
(包括
重新
抓取)的所有网站结构数据和属性。
WebDB
只是被
抓取程序使用,搜索程序并<
/p>
不使用它。
WebDB
存储
2
种实体:
页面
和
链接。
页面
表示
网络上的一个网页,
这个网页的
Url
作为标示被索引,同时建立一个
对网页内容的
MD5
哈希签名。
跟网
页相关的其它内容也被存储,包括:页面中的链接数量(外链接),页面抓
取信息(在页
面被重复抓取的情况下),还有表示页面级别的分数
score
。链
接
表示从一个网页的链接到其它网页的链接。因此
WebDB
可以说是一个网络
图,节点是页面,链接是边。
2
、
Segment
。这是网页的集
合,并且它被索引。
Segment
的
Fetchlist
是
抓取程序使用的
url
列表,它是从
WebDB
中生成的。
Fetcher
的输出数据是从
fetchlist
中抓取的网页。
Fetcher
的输出
数据先被反向索引,然后索引后的结
果被存储在
segment
中。
Segment
的生命周期是有
限制的,当下一轮抓取开始
后它就没有用了。默认的重新抓取间隔是
30
天。因此删除超过这个时间期限的
segment
p>
是可以的。而且也可以节省不少磁盘空间。
Segment
的命名是日期加时
间,因此很直观的可以看出他们的存活周期。
3
、
The
index
。索引库是反向索引所有系统中被抓取的页面,它并不直接从
页面反向索引产
生,而是合并很多小的
segment
的索引产生的。
Nutch
使用
Lucene
来建立索引,因此所有
Lucene
相关的工具
API
都
用来建立索引库。需
要说明的是
Lucene
< br>的
segment
的概念和
N
utch
的
segment
概念是完全
不同的,
不要混淆。
简单来说
Lucene
的
segment
是
Lucene
索引库的一部分,
而
Nutch
p>
的
Segment
是
WebDB
中被抓取和索引的一部分。
抓取过程详解:
p>
抓取是一个循环的过程:抓取工具从
WebDB
中生成了一个
fetchlist
集
< br>合;
抽取工具根据
fetchlist
< br>从网络上下载网页内容;
工具程序根据抽取工具发