我的开源搜索引擎之路

2019-03-27 01:20|来源: 网路

    老板要求在一个月内搭建出一个搜索引擎出来,先期要求做一个站内搜索就可以了。于是我只有苦笑了,搜索引擎谈何容易,而之前没有这方面的经验,如何是好呢?这时我脑袋里闪过的,就是需要求助开源社区了。 

    我是做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出来。     



转自:http://my.oschina.net/u/1757446/blog/263713

相关问答

更多
  • “西林街”、“盘搜一下”这两个网盘搜索速度快,资源丰富,我所钟爱用的。
  • 全文搜索 MATCH() 函数 全文索引在 MySQL 中是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上创建。对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE (或 CREATE INDEX) 创建索引,这将是非常快的。将数据装载到一个已经有 FULLTEXT 索引的表中 ...
  • 首先要弄清楚是自己的站内检索,还是对网络的检索?如果仅仅检索自己本站里面的东西很简单,在apache上把lucene下载下来,里面有个很好的例子,再去找找相关资料就行了,如果想对中文分词做好点,去看看庖丁分词法.
  • http://www.ir.iit.edu/~dagr/cs529/files/ir_book/CHAP%204%20Inverted%20Index.PDF 给出了检索实现的简单代码,你可以了解一下。入手不难。 lucene的东西你可以看《lucene分析与应用》,这是我和家立写的,底层你就差不多了。 但是这不是一个完整的搜索引擎,你还需要看Nutch的网页抓取过程,建议看《Java机器人编程》这本书。 老吴
  • 1、首先,到域名查询中心,比如万网、新网或者能查询域名所有者的地方去查询域名的注册信息,是否以前被注册过(就是我们常用的Whois查询)。如果域名曾经被注册过,我们就需要关心一下这个域名是否有过不良记录。 2、通过在Google中(site:域名),看下是否有记录,然后查看下反向链接,利用(link:域名)或者(domain:域名)可以到一些提供查询反向连接的网站去查询或者自己到搜索引擎利用命令查询。如果存在反向连接,而没有该站点被搜索引擎收录,那么这个域名很有可能被K过了,也就是存在不良记录。 3、直接输 ...
  • 在浩如烟海的Internet上,特别是其上的Web(World Wide Web万维网)上,不会搜索,就不会上网。网虫朋友们,你了解搜索引擎吗?它们是怎么工作的?你都使用哪些搜索引擎?今天我就和大家聊聊搜索引擎的话题。 一、搜索引擎的分类 获得网站网页资料,能够建立数据库并提供查询的系统,我们都可以把它叫做搜索引擎。按照工作原理的不同,可以把它们分为两个基本类别:全文搜索引擎(FullText Search Engine)和分类目录Directory)。 全文搜索引擎的数据库是依靠一个叫“网络机器人(Spi ...
  • 这方面的书还是比较多的,我所看过的有《搜索引擎技术》、《个性化搜索引擎原理与技术》、《搜索引擎原理、实践与应用》。此外还有很多基于开源软件如Lucene、nutch的开发搜索引擎的书籍,其中也介绍了不少关于原理方面的东西,而且更加面向应用。
  • 全文搜索 MATCH() 函数 全文索引在 MySQL 中是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上创建。对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE (或 CREATE INDEX) 创建索引,这将是非常快的。将数据装载到一个已经有 FULLTEXT 索引的表中 ...
  • lucene的效率没有问题,你可以100W条记录的索引放在一台机器上,用nutch分开检索的算法,或者用hadoop存储索引,自己写一个indexsearcher,但是需要注意各个机器上的结果是本地最优不是全局最优的结果,如果想全局最优的结果还得采用全局频率计数(Nutch现在有没有我不清楚),或者放开各个机器返回结果的数量,从算法理论的角度上最大可能的获得最优解。100W记录的响应我测试过,应该可以满足要求。等你遇到什么问题,可以再联系,lucene后面的基准测试你也可以看看。 老吴
  • 完全没有必要,没有牵涉到硬件与低层。用C++反而影响开发进程。 支持原创!!