转自:http://banditjava.javaeye.com/blog/240643
我的开源搜索引擎之路
老板要求在一个月内搭建出一个搜索引擎出来,先期要求做一个站内搜索就可以了。于是我只有苦笑了,搜索引擎谈何容易,而之前没有这方面的经验,如何是好呢?这时我脑袋里闪过的,就是需要求助开源社区了。
我是做Java程序员出身,很快找到了大名鼎鼎的lucene,到ibm的devleopworks上泡了几天,基本上把lucene的原理搞明白了。当第一个例子跑起来的时候,还是有一些兴奋的,因为以前都不敢触及的技术领域,终于迈出了第一步。
相信大部分中国技术人员在对待国外的开源软件做的第二件事情就汉化,对于搜索引擎来说就是中文分词。第二轮的google查询,挑选了paoding分 词,中国牛人实现的分词算法,在paoding的发布文档中有明确的集成方法,很容易就实现了。当第一个中文搜索结果呈现出来的时候,着实又兴奋了一下, 因为可以在自己的站点上baidu了,信心有点膨胀,不要见怪啊。
于是为了能出一个最初级的demo,我将lucene的demo改造了一下,将里面的JSP全部加上了公司的LOGO,并且仿造着baidu的风格,做出 了索引页和查询结果页。并将分页、页面显示、查询结果,甚至copyright都实现了一遍。做完这些的时候,我想可以给老板看一下了。这时离老板给我下 达组建搜索引擎命令时只有5天,不得不感谢开源啊。
第一个目标达到后,我开始关注一切搜索引擎技术,下载了很多资料,有用的没用的都看一遍。这时我又心虚了,要实现的技术实在太多了。抓取、压缩、存储、分词、分类、整理、索引、合并、搜索、语义理解、缓存、加速、展示。我觉得每一样都是一个学科,额的神啦!
看了几天文章后,我觉得总要做点什么。于是找到lucene的一些相关项目玩了玩,包括solr、compass、 luke,heritrix,GlusterFS等。heritrix是一个强大的网络爬虫,我用这东东花了两天时间,把公司的新闻频道都给抓下来了,比 较横。GlusterFS是一个分布式文件系统,但经过一番研究后,发现它用来做文件镜像备份比较好,适合网站应用。
其中关于solr,研究了两天把demo搭起来,写了几个PHP程序调用,总体感觉这东东做展示、分词与索引管理方面比较强,但要搭建一个大型搜索引擎,solr明显不能胜任,与是就此打住了,没有继续研究。
所幸的是lucene的发明者Doug Cutting发起了另一个开源项目nutch,它是一个完全的搜索引擎应用程序,包括crawl,distributed computing,search三个部分,这个项目基本上满足我当时对于搜索引擎架构的需求。一个可以用无限扩展的PC Server集群构建软件,又兴奋了。
但我没有急于搭建nutch的应用环境,因为实在不清楚在nutch项目中哪是hadoop文件,哪些是nutch本身的文件。我从hadoop官方站点 上下载了hadoop源程序,现在最新的是0.19-dev。用了三台linux服务器做测试,配置花了我整整两天,基本上把能做的demo和配置环境都 试了一遍,收获不小,不得不感叹开源项目有如此功力。把google的mapreduce和dfs都用java实现了一遍,不敢说可以商业运营,但至少给 类似我这些的技术人员可以迅速进入这个技术领域提供了超乎想像的便利。hadoop除了实现了google提出的mapreduce计算模型外,还实现了 类似于GFS(google file system)的分布式文件系统HDFS(Hadoop distributed file system)。很好,很强大!在做hadoop时要感谢一下公司的运维工程师波波,这一块需要一些linux配置经验。
时机成熟了,我回过头来开始搭建nutch项目,将项目编译了一个新版本,简单的ant package就搞定了,将nutch的编译版本发布到之前搭好的hadoop的环境中去,运行一下,居然一次成功了,测试命令都能通过。开始 crawl,看到mapreduce的执行过程,心里别提多兴奋了。接下来把之前研究好的paoding将到了nutch项目中,是用nutch的插件体 系实现,没有改nutch的一句代码,关于这个的文章不多,完全是靠对ant的理解自行搞定的,呵呵。
为了尽快出效果,将crawl的结果从hdfs中拉到了local,配置一下nutch.war中的nutch-site.xml,迫不及待的启动 tomcat。敲入链接,OK。一切都是那么美妙。nutch的logo也比较可爱,两个小人。接下来,我又拿出来模仿神功,将nutch的所有JSP修 改成自己的搜索引擎字样。nutch里面实现了标题显示,高亮显示,网页链接显示,网页快照,页面评分,锚链接,以及RSS搜索等等。
到这里,我的第二个目的也达到了,就是利用分布式计算平台来搭建搜索引擎。大家可以看看我这段时间研究的成果。http://so.21315.com
记录下我到现在对搜索引擎研究的路程,是为了给想进入搜索领域的技术人员一个参照。另外,在今后的文章中,我会陆续将我每一步研究的心得也blog出来。