我的开源搜索引擎之路

转自: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出来。    

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
,发送类别,概率,以及物体在相机坐标系下的xyz.zip目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值