老板要求在一个月内搭建出一个搜索引擎出来,先期要求做一个站内搜索就可以了。于是我只有苦笑了,搜索引擎谈何容易,而之前没有这方面的经验,如何是好呢?这时我脑袋里闪过的,就是需要求助开源社区了。
我是做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搜索等等。
到这里,我的第二个目的也达到了,就是利用分布式计算平台来搭建搜索引擎。
记录下我到现在对搜索引擎研究的路程,是为了给想进入搜索领域的技术人员一个参照。另外,在今后的文章中,我会陆续将我每一步研究的心得也blog出来。
分享到:
相关推荐
Java开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava...
标题中的"(C#开源搜索引擎).rar"表明这是一个与C#编程语言相关的开源搜索引擎项目。开源意味着源代码可供公众查看、使用、修改和分发。这个压缩包可能包含了一个完整的搜索引擎解决方案,供开发者学习、研究或者在...
本主题聚焦于一个特别的应用场景——"c# 开源搜索引擎",这是一个利用C#构建的开源搜索引擎项目,提供了完整的源代码供学习和参考。 搜索引擎的核心功能包括数据收集(爬虫)、索引构建、查询处理和结果展示。以下...
建立索引,检索,分词,分类,开源搜索引擎,solr
《国内首例开源搜索引擎分词:云寻觅的探索与实践》 在信息化时代,搜索引擎作为获取信息的重要工具,其核心之一就是分词技术。分词是自然语言处理中的基础步骤,它将连续的文本流分割成具有独立意义的词语,从而为...
迅龙中文Web搜索引擎是一款由C#编程语言编写的开源搜索引擎程序,它为开发者提供了一种高效、易用的方式来实现中文网页的索引与检索功能。这款软件的核心在于其强大的文本处理和搜索算法,能够有效地处理中文分词和...
《C#实现的开源搜索引擎深度解析》 在IT领域,搜索引擎是信息检索的重要工具,而C#作为.NET框架下的主流编程语言,也被广泛应用于各种软件开发,包括搜索引擎的实现。本篇文章将深入探讨一个基于C#编写的开源搜索...
其中内容均为前段时间研究开源搜索引擎时搜集参考的资料,非常齐全包含的内容有: Computing PageRank Using Hadoop.ppt Google的秘密PageRank彻底解说中文版.doc JAVA_Lucene_in_Action教程完整版.doc Java开源搜索...
PHP实例开发源码—开源搜索引擎整合系统 Seeknove.zip PHP实例开发源码—开源搜索引擎整合系统 Seeknove.zip PHP实例开发源码—开源搜索引擎整合系统 Seeknove.zip
### 利用开源工具搭建小型搜索引擎 #### 一、搜索引擎基础知识 **1.1 搜索引擎的分类** 搜索引擎根据其工作方式和数据处理的特点可以分为以下几类: - **目录索引类**: 这类搜索引擎主要依靠人工或者半自动的...
开源的搜索引擎工具包和Web搜索引擎系统为开发者提供了构建高效、自定义化的搜索解决方案的基础。本文将介绍几个知名的开源项目,包括Lucene、LIUS、Egothor和Xapian。 1. **Lucene** Lucene是由Apache基金会维护...
把程序上传到空间上即可运行(★★如果在子目录...之前使用1.X版本的站长需要全部重新覆盖本程序采用utf-8国际编码编写,请勿使用记事本修改代码,否则会出错。请用支持utf-8编码的编辑器修改,如notepad++、dreamweaver
网博垂直搜索引擎完全开源版 1.前台结合Lucene的搜索引擎功能,使得数据搜索更快; 2.新增加采集功能,采集时图片下载,flash下载功能,默认配置的是南海网分类信息的采集规则; 3.该代码简洁,完全开源,可以与...
Nutch 是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。 nutch 1.0
大多数搜索引擎应用都必须具有某种搜索功能,问题是搜索功能往往 是巨大的资源消耗 并且它们由于沉重的数据库加载而拖垮你的应用的性能。 这就是为什么转移负载到一个外部的搜索服务器是一个不错的主意, Apache ...
在本教程中,我们将深入探讨如何利用开源搜索引擎技术快速构建一个全文搜索平台。开源搜索引擎以其灵活性、可扩展性和成本效益,已经成为许多企业和开发者构建高效检索系统的首选方案。本实战教程将带你一步步实现这...
开源搜索引擎Sphider是一款专为小型到中型网站设计的搜索引擎解决方案,由PHP编写,以MySQL作为后端数据库。它的核心优势在于其轻量级、高效且易于部署和定制,使得许多不懂复杂编程的网站管理员也能为其网站添加...