参考:http://lotusroots.bokee.com/6106980.html
了解nutch的人基本上对这个开源的系统都是比较欣赏的,起码在国内是这样的,也很有多搜索网站是基于这个系统修改过来的,不过要做得好,做得真正是一个商业化的搜索,这个修改就不是一朝一夕的事情,也不是修修剪剪那么简单了。
作为一个通用的全网级别的搜索引擎架构,nutch(lucene)确实为广大人民群众提供了一块大大的蛋糕,为进入搜索这个行业大大降低了门槛。那么它距商业的搜索到底有多远呢?以我的个人观点来谈一下。
一、总体功能
一个专业的网络搜索引擎至少包含3部分即抓取、处理和搜索。下面是它们的一般功能:
-
抓取:抓取(蜘蛛、爬虫、crawler、spider等)程序负责爬行特定网络(也可能是整个网络),把网络上的页面和其它需要的文件下载到本地来。目前的难点是web2.0的普及导致的js分析和身份认证等问题。
-
处理:处理(分类、信息抽取、数据挖掘、classify、information extraction、data mining等)程序对抓回来的页面进行分析,比如,对网站的内容进行分类、对新闻页面的新闻信息进行提取、页面模版生成、对各个网站之间的关系进行计算等等。
-
搜索:搜索(information retrieve)程序负责把文档填充到数据库,然后根据查询字符串到数据库中寻找最相关的文档展现给用户。
二、信息抓取
网络信息抓取包含了见面抓取、文本文件抓取和其它文件地抓取。普通的信息抓取利用基本的html页面分析器(htmlParser、NeckoHtml、 JTidy等)来解析页面,得到其中的信息。基本上两点,一个是抓取,一个是分析。抓取这一步要处理身份论证、要支持多种协议等等的,nutch在这里默 认的插件使用的是nekohtml,效果还可以。但是nutch对html分析的结果的文本是把页面里所有的文本都合在一起(其中有一个开关来控制内层锚 文本是否加上)作为总文本输出,所以这样页面上所有的噪音都没有去除。另一个是分析,分析一个html,最强的要数ie、firefox等浏览器了,在这一步上,nutch默认的htmlParser的处理能力是不可同日而语的。现在ajax盛行,对于js的处理也是一个重大的问题,现在nutch对js是视而不见的。
三、信息处理
对于信息的处理是nutch最薄弱的环节了,同时也是这个行业里的“宝地”,胜败决定就在这里。这里包括分类、信息抽取、数据挖掘、classify、information extraction、data mining等等,在默认的nutch组件里有cluster这个包,是用来为搜索结果进行聚类用的,还有ontology (本体),是人工智能范畴内的概念。nutch为这方面准备了最最基本的接口,其它的就得自己搞定了,比如机器学习(ML)、自然语言处理(NLP)、数据分析(DA)。nutch默认的聚类是用开源Carrot2 的后缀树算法做Web文本聚类。而Ontology研究热点的出现与Semantic Web的提出和发展直接相关,借助Ontology中的推理规则,使应用系统具有一定的推理能力。默认的nutch也带了一个简单的ontology的应用系统--HP的jena。但是对于一个商业应用来说这些仅仅是一个模具性质的。
四、搜索
nutch其实从功能上来讲是由爬虫和搜索两大部分组成的,搜索是lucene来挑梁的。所以这部分的局限其实就是lucene的局限了。lucene也 可能从功能上分为两大部分,一个是索引,一个是查询。对于这部分的研究已经很久了,就是把用户最想要的文档返回给用户,对于搜索引擎而言,速度是非常重要 的。索引,专业点说,包含2种:前向索引和反向索引(倒排索引,inverted index)。前者表示的是某个文档里面的所有词语,后者表示的是包含某个词语的所有文档。对应到Lucene上面,它的前向索引可以认为是Term Vectors(词语向量)相关文件,包含.tvx、.tvd和.tvf这3种文件。前向索引没有什么好评论的,它一般只是做为重组原始数据时候的依据,其构建十分简单明了。反向索引对应到Lucene上就是index(索引)。Lucene把索引划分成一个一个的segment(块,其实是一个小索引),直观的说,当有一批新数据到达的时候,我们一般给其构建成一个新的segment,这是因为修改原来的segment的代价很高(并不是说一定很高,只是lucene采用的文件结构无法简单的加入新的文档)。当一个index包含的segment太多的时候,查找性能就很差了(因为一次查询需要查询多个segment),需要进行segment的合并。在搜索方面nutch对lucene作了外部的处理,一是可以进行分布式搜索,每个节点只返回最高分值的结果,最近再合并;另一方面是对查询进行缓冲,不过只有一级缓冲--LRU(nutch的cache策略及cache策略研究)。
五、结论
仅仅从搜索引擎的构架来看,Lucene(Nutch)缺失的一环是信息的处理。信息的处理恰恰是整个搜索引擎中最核心的技术。所以说对于现在这个行业化、垂直化的搜索时代,nutch 的先天不足就已经是致命的了,但是这并不是不可挽回的,nutch的插件式架构,开放的系统逻辑等等特点,已经为开发者打开了窗户。nutch比较通用的 处理逻辑,加上灵活的插件式架构,给我们定制它插上了翅膀。但是它也仅仅是一个框架,里面的任何一个细节都会让你头痛不已(比如ML,NLP)!所以真正 的难点也就是这些让人头痛的地方。