了解nutch的人基本上对这个开源的系统都是比较欣赏的,起码在国内是这样的,也很有多搜索网站是基于这个系统修改过来的,不过要做得好,做得真正是一个商业化的搜索,这个修改就不是一朝一夕的事情,也不是修修剪剪那么简单了。
一、总体功能
一个专业的网络搜索引擎至少包含3部分即抓取、处理和搜索。下面是它们的一般功能:
抓取:抓取(蜘蛛、爬虫、crawler、spider等)程序负责爬行特定网络(也可能是整个网络),把网络上的页面和其它需要的文件下载到本地来。目前的难点是web2.0的普及导致的js分析和身份认证等问题。
处理:处理(分类、信息抽取、数据挖掘、classify、information
搜索:搜索(information
二、信息抓取
网络信息抓取包含了见面抓取、文本文件抓取和其它文件地抓取。普通的信息抓取利用基本的html页面分析器(htmlParser、NeckoHtml、
抓取这一步要处理身份论证、要支持多种协议等等的,nutch在这里默认的插件使用的是nekohtml,效果还可以。但是nutch对html分析的结果的文本是把页面里所有的文本都合在一起(其中有一个开关来控制内层锚文本是否加上)作为总文本输出,所以这样页面上所有的噪音都没有去除
另一个是分析,分析一个html,最强的要数ie、firefox等浏览器了,在这一步上,nutch默认的htmlParser的处理能力是不可同日而语的。现在ajax盛行,对于js的处理也是一个重大的问题,现在nutch对js是视而不见的。
对于信息的处理是nutch最薄弱的环节了,同时也是这个行业里的“宝地”,胜败决定就在这里。这里包括分类、信息抽取、数据挖掘、classify、information
在默认的nutch组件里有cluster这个包,是用来为搜索结果进行聚类用的,
还有ontology
nutch为这方面准备了最最基本的接口,其它的就得自己搞定了,比如机器学习(ML)、自然语言处理(NLP)、数据分析(DA)。。
四、搜索
nutch其实从功能上来讲是由爬虫和搜索两大部分组成的,搜索是lucene来挑梁的。所以这部分的局限其实就是lucene的局限了。lucene也可能从功能上分为两大部分,一个是索引,一个是查询。对于这部分的研究已经很久了,就是把用户最想要的文档返回给用户,对于搜索引擎而言,速度是非常重要的。索引,专业点说,包含2种:前向索引和反向索引(倒排索引,inverted
Lucene把索引划分成一个一个的segment(块,其实是一个小索引),直观的说,当有一批新数据到达的时候,我们一般给其构建成一个新的segment,这是因为修改原来的segment的代价很高(并不是说一定很高,只是lucene采用的文件结构无法简单的加入新的文档)。
五、结论
仅仅从搜索引擎的构架来看,Lucene(Nutch)缺失的一环是信息的处理。信息的处理恰恰是整个搜索引擎中最核心的技术。所以说对于现在这个行业化、垂直化的搜索时代,nutch