`
banditjava
  • 浏览: 159924 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我的开源搜索引擎之路

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

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


28
12
分享到:
评论
39 楼 youjianbo_han_87 2010-08-19  

30 楼 redhacker 2008-10-24   引用
solr示例:http://sou.chinanews.com/search.do


不怎么样啊,太慢了。
38 楼 busy12377 2009-10-19  
楼主好啊!我这几天也做站内搜索,我有俩个问题没弄明白。
1.站内的鉴定,哪些网页是站内的。我是用url中的某些相同的字段来鉴定的。不是很满意。不知道楼主怎么做的!
2.我做了N次试验不知道怎么结束。即把所有的站内网页都找到。因为太多了总是不能结束。还有就是可能“会有益处现象”(这个不先考虑也行)。
37 楼 lucky16 2009-07-27  
学习了!
最近正要用上这个呢!
36 楼 ianwong 2008-12-05  
请问庖丁跟nutch是怎么结合的?牛哥
35 楼 Aguo 2008-11-16  
很好,毕业设计就是想搞搜索引擎,以后多指教啊
34 楼 大猫汤姆 2008-11-13  
呵呵,搜索引擎我原来也做过,前期和你一样,到处找例子,我当初把NUCH跑起来搜索到文章的时候也比较兴奋,与LINUX上的全文索引效果差不多。后来发现研究这玩意太花时间了,因为功能太多。然后自己量身开发了一个站外搜索,发现其实是很简单的,效果更好一些。
还有站内搜索与站外搜索我认为不是同一样东西。
33 楼 sunypzh 2008-11-04  
路过,看过,很强大,希望以后多多指教,
32 楼 xushiliang 2008-10-28  
不错,学习下。楼主的学习能力好强啊!
31 楼 banditjava 2008-10-24  
redhacker 写道

solr示例:http://sou.chinanews.com/search.do

做得真是不错,赞一个!分类很清楚,页面也很干净。
30 楼 redhacker 2008-10-24  
solr示例:http://sou.chinanews.com/search.do
29 楼 banditjava 2008-10-15  
做lucene的demo只花了5天,研究nutch,hadoop花了25天
28 楼 fuwang 2008-10-15  
从老板下命令到第一次给老板看demo,你花了25天?
27 楼 banditjava 2008-10-14  
dengcong 写道

快照出来的都是乱码


快照网页的编码是UTF-8,你试一下编码!
26 楼 dengcong 2008-10-14  
快照出来的都是乱码
25 楼 banditjava 2008-10-10  
看看,是不是网络的问题啊,我的搜索应用在一个月前就处理了你所说的问题了。
24 楼 silence 2008-10-09  
恩,都上线了页面效果怎么也不处理一下啊,还有那个分页也不好使啊。点后全白的
23 楼 banditjava 2008-09-24  
zhangsichu 写道

Heritrix + NutchWAX + Nutch + Padoing 听说是个不错的方案

在这方案基础上,还需要解决存储的高速压缩,索引分类、分级归档、分级缓存等,如果没有更好的开源软件支持,就需要自己写了。现在nutch就还需要处理这些问题。
22 楼 zhangsichu 2008-09-24  
Heritrix + NutchWAX + Nutch + Padoing 听说是个不错的方案
21 楼 banditjava 2008-09-24  
so.21315.com刚才服务器重启了一下,现在可以,换了一个端口,原来用的是7001,现在用的是7005,在apache上做了重新做了一个跳转
20 楼 ladyloveme 2008-09-24  
我连着点了几次,就无法显示网页了

相关推荐

    Java开源搜索引擎分类列表.rar

    Java开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava开源搜索引擎分类列表.rarJava...

    (C#开源搜索引擎).rar

    标题中的"(C#开源搜索引擎).rar"表明这是一个与C#编程语言相关的开源搜索引擎项目。开源意味着源代码可供公众查看、使用、修改和分发。这个压缩包可能包含了一个完整的搜索引擎解决方案,供开发者学习、研究或者在...

    c# 开源搜索引擎完整的例子

    本主题聚焦于一个特别的应用场景——"c# 开源搜索引擎",这是一个利用C#构建的开源搜索引擎项目,提供了完整的源代码供学习和参考。 搜索引擎的核心功能包括数据收集(爬虫)、索引构建、查询处理和结果展示。以下...

    开源搜索引擎,solr

    建立索引,检索,分词,分类,开源搜索引擎,solr

    国内首例开源搜索引擎分词

    《国内首例开源搜索引擎分词:云寻觅的探索与实践》 在信息化时代,搜索引擎作为获取信息的重要工具,其核心之一就是分词技术。分词是自然语言处理中的基础步骤,它将连续的文本流分割成具有独立意义的词语,从而为...

    迅龙中文Web搜索引擎(.NET)-开源的搜索引擎程序C#编写

    迅龙中文Web搜索引擎是一款由C#编程语言编写的开源搜索引擎程序,它为开发者提供了一种高效、易用的方式来实现中文网页的索引与检索功能。这款软件的核心在于其强大的文本处理和搜索算法,能够有效地处理中文分词和...

    一个C#写的开源搜索引擎代码

    《C#实现的开源搜索引擎深度解析》 在IT领域,搜索引擎是信息检索的重要工具,而C#作为.NET框架下的主流编程语言,也被广泛应用于各种软件开发,包括搜索引擎的实现。本篇文章将深入探讨一个基于C#编写的开源搜索...

    基于lucene和nutch的开源搜索引擎资料集合

    其中内容均为前段时间研究开源搜索引擎时搜集参考的资料,非常齐全包含的内容有: Computing PageRank Using Hadoop.ppt Google的秘密PageRank彻底解说中文版.doc JAVA_Lucene_in_Action教程完整版.doc Java开源搜索...

    PHP实例开发源码-开源搜索引擎整合系统 Seeknove.zip

    PHP实例开发源码—开源搜索引擎整合系统 Seeknove.zip PHP实例开发源码—开源搜索引擎整合系统 Seeknove.zip PHP实例开发源码—开源搜索引擎整合系统 Seeknove.zip

    开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.docx

    开源的搜索引擎工具包和Web搜索引擎系统为开发者提供了构建高效、自定义化的搜索解决方案的基础。本文将介绍几个知名的开源项目,包括Lucene、LIUS、Egothor和Xapian。 1. **Lucene** Lucene是由Apache基金会维护...

    火端搜索引擎源码V2.0开源版_开源_V2_火端搜索程序_搜索引擎_

    把程序上传到空间上即可运行(★★如果在子目录...之前使用1.X版本的站长需要全部重新覆盖本程序采用utf-8国际编码编写,请勿使用记事本修改代码,否则会出错。请用支持utf-8编码的编辑器修改,如notepad++、dreamweaver

    垂直搜索引擎完全开源版

    网博垂直搜索引擎完全开源版 1.前台结合Lucene的搜索引擎功能,使得数据搜索更快; 2.新增加采集功能,采集时图片下载,flash下载功能,默认配置的是南海网分类信息的采集规则; 3.该代码简洁,完全开源,可以与...

    开源搜索引擎nutch-1.0.part09.rar

    Nutch 是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。 nutch 1.0

    开源搜索平台solr.pdf

    大多数搜索引擎应用都必须具有某种搜索功能,问题是搜索功能往往 是巨大的资源消耗 并且它们由于沉重的数据库加载而拖垮你的应用的性能。 这就是为什么转移负载到一个外部的搜索服务器是一个不错的主意, Apache ...

    迅速搭建全文搜索平台——开源搜索引擎实战教程--代码.rar

    在本教程中,我们将深入探讨如何利用开源搜索引擎技术快速构建一个全文搜索平台。开源搜索引擎以其灵活性、可扩展性和成本效益,已经成为许多企业和开发者构建高效检索系统的首选方案。本实战教程将带你一步步实现这...

    开源搜索引擎sphider

    开源搜索引擎Sphider是一款专为小型到中型网站设计的搜索引擎解决方案,由PHP编写,以MySQL作为后端数据库。它的核心优势在于其轻量级、高效且易于部署和定制,使得许多不懂复杂编程的网站管理员也能为其网站添加...

Global site tag (gtag.js) - Google Analytics