开源搜索引擎评估:lucene sphinx elasticsearch
开源搜索引擎评估:lucene sphinx elasticsearch
开源搜索引擎程序有3大类
lucene系,java开发,包括solr和elasticsearch
sphinx,c++开发,简单高性能
Xapian,c++开发
搜索引擎程序这个名称不妥当,严格说来应该叫做索引程序(indexing program),早期主要用来做中文全文搜索,但是随着互联网的深入普及,各家网站规模越来越大,索引程序在 优化网站架构上发挥了更大的作用:替代mysql数据库内置的索引
让mysql no sql化,只承担数据持久化存储的功能
消除join查询/子查询,提高数据库的并发处理能力
使用状况
Lucene出自名门,子孙兴旺,而且它的兄弟Hadoop风头正盛,所以名气最大,而sphinx因为简单可靠,代码结构优良,性能非常好,在国内大型网站中使用最广.xapian用户太少,不建议使用
技术选型要选人最多的方向,不可标新立异
搜索性能
elasticsearch有数据说是200ms
solr 我目前手上没有数据,应该比sphinx慢
sphinx 平均搜索时间:20ms,如此之快,是因为sphinx的基本上可以算作静态索引。
client API只能update已经存入的document属性,不能添加新文档。
加入新文档只有通过 build/merge的方式,磁盘IO开销很大,从这个角度,sphinx不适合内容更新频繁的网站,不适合做实时索引。但现实情况是国内强UGC的网站基本上都采用sphinx,比如新浪微博,搜狐微博,赶集网,discuz等
这对程序员来说是巨大的挑战:只能通过建立多级索引,或者采用sphinx+solr的混合方案
Lucene系
Lucene 就是一个纯粹的索引程序代码包,使用的时候,你得写一个简单的server程序(接受关键词-通过lucence查询-返回结果),然后配置在应用服务器 中(tomcat/Resin),一般来说,这个server程序会采用http协议,或者xml-rpc,直接用tcp那也太无聊了
Solr 有大侠急公好义,帮你把上文提到的web 程序写好了,你只需要配置部署就可用,这就是solr,solr对外的接口是http协议,也支持分布式索引
Elasticsearch,新项目,最近很红,其实也是Lucene的马甲,有如下特点
restful接口
分布式导向,包括分布式搜索,分布式索引,零配置,自动分片,索引自动负载
针对实时搜索专门优化:先把索引放在内存中,定期同步到硬盘
附带web 图形化管理工具
elasticsearch 从设计思路上是针对 Amazon CloudSearch,它的关键词是
分布式
实时
高可用
这几点一看就是高富巨,日uv几百万的网站,索引也只有几十G,普通玩家是用不着的
但是从紧跟前沿技术的角度,如果你的索引服务器超过3台,可以尝试部署elasticsearch,性能现在是差点,但硬件和时间会帮你搞定一切
Sphinx:
- Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)
高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)
高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)
支持分布式检索
支持基于短语和基于统计的复合结果排序机制
支持任意数量的文件字段(数值属性或全文检索属性)
支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)
支持作为Mysql的存储引擎(可以只改变sql就能实现全文搜索)
coreseek就是基于sphinx的实现
部署 sphinx编译,部署,配置都不复杂,不需要代码级的修改。支持原生的mysql数据源,也支持xml数据。
搜索API支持PHP、Python、Perl、Rudy和Java,使用简单,可以在短时间内移植到新语言上。
对于中文搜索,国内有coreseek和sphinx-for-chinese两个版本,内部使用了mmseg这个分词器。用户可以自定义分词库。
sphinx不需要太注重索引维护,但是它的缺点就是不太能实时的更新索引,支持的功能没有LUCENE强大,但是足够一个中小型网站使用。
lucene功能强大,和消息队列结合会很好,唯一的缺点就是索引难维护,特别是多个索引的情况下。
sphinx相比lucence,配置简单,易用,功能没有lucencename完善和强大。
如果是用php作服务器端脚本,最好还是用sphinx。如果用java做服务器端脚本,最好用Lucene。
开源搜索引擎评估:lucene sphinx elasticsearch的更多相关文章
- 开源搜索引擎评估:lucene sphinx elasticsearch (zhuan)
http://lutaf.com/158.htm ************************ 开源搜索引擎程序有3大类 lucene系,java开发,包括solr和elasticsearch s ...
- Solr vs. Elasticsearch谁是开源搜索引擎王者
当前是云计算和数据快速增长的时代,今天的应用程序正以PB级和ZB级的速度生产数据,但人们依然在不停的追求更高更快的性能需求.随着数据的堆积,如何快速有效的搜索这些数据,成为对后端服务的挑战.本文,我们 ...
- 转 Solr vs. Elasticsearch谁是开源搜索引擎王者
转 https://www.cnblogs.com/xiaoqi/p/6545314.html Solr vs. Elasticsearch谁是开源搜索引擎王者 当前是云计算和数据快速增长的时代,今天 ...
- 开源搜索引擎排名第一,Elasticsearch是如何做到的?
一.引言 随着移动互联网.物联网.云计算等信息技术蓬勃发展,数据量呈爆炸式增长.如今我们可以轻易得从海量数据里找到想要的信息,离不开搜索引擎技术的帮助. 作为开源搜索引擎领域排名第一的 Elast ...
- 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装
第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装 elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于 ...
- 一些开源搜索引擎实现——倒排使用原始文件,列存储Hbase,KV store如levelDB、mongoDB、redis,以及SQL的,如sqlite或者xxSQL
本文说明:除开ES,Solr,sphinx系列的其他开源搜索引擎汇总于此. A search engine based on Node.js and LevelDB A persistent, n ...
- 【搜索引擎】SOLR VS Elasticsearch(2019技术选型参考)
SOLR是什么 (官方的解释) Solr是基于Apache Lucene构建的流行的.快速的.开源的企业搜索平台. Solr也是高度可靠.可伸缩和容错的,提供分布式索引.复制和负载平衡查询.自动故障转 ...
- 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...
- 五十 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...
随机推荐
- ViewPageAsImage
var ViewPageAsImage = function(target, label) { var setting = { min_height: 4, min_width: 4 ...
- 蓝桥杯java高职组
标题1: 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中 国清华大学讲学. 一次,他参加某个重要会议,年轻的脸孔引人注目.于是 ...
- Flex中怎么给表格中的滚动栏定位
1.问题背景 假设表格中的字段过多,会出现滚动栏,在将滚动栏滚到一定的位置时,又一次刷新表格.滚动栏会回到原处,原来查看的字段还得继续滚动,才干查看到. 2.实现实例 <? xml versio ...
- 【COCOS2D-HTML5 开发之三】演示样例项目附源代码及执行的GIF效果图
本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d- ...
- WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)
原文:WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济 ...
- java 一个函数EnumMap返回多个值
java 一个函数如何返回多个值 在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值 ...
- Python文件处理(1)
读取文件 解决方案: 最简单的就是一次性读取所有的内容放在一个大字符串中 all_the_text=open('thefile.txt').read() all_the_data=open('abin ...
- linux下tomcat shutdown后 java进程依然存在
今天遇到一个非常奇怪的问题,如标题所看到的: linux下(之所以强调linux下,是由于在windows下正常),运行tomcat ./shutdown.sh 后,尽管tomcat服务不能正常訪问了 ...
- JavaWeb图表插件的小研究
背景 近期的一个项目中,对数据的统计分析有非常大的要求,这就要求有一款非常强大的报表.图表插件.因此,组长给分了任务.让我们各自去研究不同的图表插件.用了一两天的时间,对java这块的图表插件做了一个 ...
- windows live writer插件说明文档(附录网盘地址)
百度云地址:http://pan.baidu.com/s/1hqnjzjY 1.Screen Capture tool 用于直接在WLWriter中进行截图的一个插件,要配合SnagIt 这个软件使用 ...