`
yanglingstu
  • 浏览: 21069 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

开源搜索引擎Nutch初体验

阅读更多
Nutch的源码,它的作者和Lucene是一个人,但除了使用基于Lucene的索引和检索模块外,它还包括了crawler、crawl frontier、反向链接数据库、Web检索前端等其它组件。它至少有两大亮点决定了它是目前最好的开源搜索引擎实现,一个是基于Lucene的高效索引和检索功能,另一个是基于Apache的另一开源项目Hadoop实现的类似于Google的分布式文件系统,特别是它大量使用了Google的Map-Reduce思想,从而大大简化了很多功能模块的设计,但也为从来没有接触到Map-Reduce的初学者带来了直线上升的“学习曲线”。可以这样说,没有对Map-Reduce的思想的深刻理解,读懂Nutch源码是非常困难的,所以自己昨天花了半天的时间进行这种必要的准备工作,甚至仔细阅读了Google Lab里的相关论文,深深地为它的巧妙构思而折服。有了Lucene和Map-Reduce这两大块基础知识的准备后,阅读Nutch源码会是一件非常轻松愉快的旅程,它的代码要比以前自己研究过的Lucene容易懂得多,一个很重要的原因是对Map-Reduce的大量使用。另一件引人入胜的事情是一边分步执行代码,一边阅读相关类的源码。今天从下午3点开始研究Nutch,不知不觉就过了吃晚饭的时间,现在已经把主要模块的机理了解清楚,只剩下最后一步的Searcher模块还没看。下面总结一些研究过程中的经验,以备以后自己或相关人员参考:

    首先介绍如何下载Nutch源码并在Eclipse里面对其进行Debug:

1。从Nutch主页(http://lucene.apache.org/nutch/)下载到最新的版本(自己下载的是2007年4月2日的0.9版,有68M之大),然后将其解压缩;
2。修改conf/nutch-default.xml文件,最简单的只填写http.agent.name的属性即可;
3。打开Eclipse,创建一个指向Nutch目录下的build.xml的Ant Buildfile的新项目,为其引用的hadoop-0.12.2.jar指定从网上下载的hadoop源文件,这点非常重要,因为项目里引用hadoop包的次数实在是太多了,当然也可以为lucence捆定下载的源码;
4。Nutch的使用方法都集中在一个shell脚本程序里:bin/nutch,要想在Eclipse里像在shell下正常工作,必须在它的启动选项里尽可能进行相近的配置,最主要的是两个,一个是在ClassPath里加入conf和plugin两个子目录,另一个是在VM参数里加入-Dhadoop.log.dir=logs -Dhadoop.log.file=hadoop.log,如果还有问题,参考bin/nutch脚本即可!

        按照Nutch网站上的Tutorial初步尝试了一下整个流程,感觉要想在它基础上做出一个功能齐全的中文水平式搜索引擎,还需要在以下几个方面做足功夫:

1。加入中文分词模块,国内开源的基于JAVA的中文分词程序很少见到,可以参考国外最新的开源软件,比如Standford的中文分词器;
2。基于Map-Reduce实现PageRank的计算,这部分功能是Nutch里目前最大的缺憾之一,解决办法可以参考另一个开源搜索引擎Egothor的实现方法,但要基于Map-Reduce来做可能并不容易;
3。因为仅下载中文网页,所以在识别中文字符编码上面还要做些文章,这方面好象Nutch里已经包括了自动识别网页语言的功能;
4。中文网页相对于英文网页来说质量偏低,有更多的嗓音和内容重复的比例(和中文的学术论文有相近之处,),这方面有大量的论文可以参考,但如何在实现效果和复杂度方面进行理想的权衡并不容易;
5。Nutch的Web前端是非常简陋的,这方面可以做很多文章,比如加入Ajax技术丰富用户体验(Relevance Feedback、查询词自动补齐、网页快照自动跳出等)或者加入聚类引擎功能,等等;
6。不仅提供为人类用户的Web检索前端,也可以提供供计算机程序使用的基于Web Service服务。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics