博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开源搜索引擎评估:lucene sphinx elasticsearch
阅读量:6973 次
发布时间:2019-06-27

本文共 1848 字,大约阅读时间需要 6 分钟。

 

开源搜索引擎评估:lucene sphinx elasticsearch

开源搜索引擎程序有3大类

  • lucene系,java开发,包括和

  • sphinx,c++开发,简单高性能

  • Xapian,c++开发

搜索引擎程序这个名称不妥当,严格说来应该叫做索引程序(indexing program),早期主要用来做中文全文搜索,但是随着互联网的深入普及,各家网站规模越来越大,索引程序在 优化网站架构上发挥了更大的作用:替代mysql数据库内置的索引

  1. 让mysql no sql化,只承担数据持久化存储的功能

  2. 消除join查询/子查询,提高数据库的并发处理能力

使用状况

Lucene出自名门,子孙兴旺,而且它的兄弟Hadoop风头正盛,所以名气最大,而sphinx因为简单可靠,代码结构优良,性能非常好,在国内大型网站中使用最广.xapian用户太少,不建议使用

技术选型要选人最多的方向,不可标新立异

搜索性能

  • elasticsearch

  • 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的马甲,有如下特点

    1. restful接口

    2. 分布式导向,包括分布式搜索,分布式索引,零配置,自动分片,索引自动负载

    3. 针对实时搜索专门优化:先把索引放在内存中,定期同步到硬盘

    4. 附带web 图形化管理工具

elasticsearch 从设计思路上是针对 ,它的关键词是

  • 分布式

  • 实时

  • 高可用

这几点一看就是高富巨,日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,使用简单,可以在短时间内移植到新语言上。

对于中文搜索,国内有和两个版本,内部使用了mmseg这个分词器。用户可以自定义分词库。

sphinx不需要太注重索引维护,但是它的缺点就是不太能实时的更新索引,支持的功能没有LUCENE强大,但是足够一个中小型网站使用。

lucene功能强大,和消息队列结合会很好,唯一的缺点就是索引难维护,特别是多个索引的情况下。

sphinx相比lucence,配置简单,易用,功能没有lucencename完善和强大。

如果是用php作服务器端脚本,最好还是用sphinx。如果用java做服务器端脚本,最好用Lucene。

 

 

转载地址:http://eiesl.baihongyu.com/

你可能感兴趣的文章
列表用法
查看>>
Vue SPA 项目在 Amazon S3 部署小技巧
查看>>
数据段、数据报、数据包、帧的区别与联系
查看>>
如何迅速分析出系统CPU的瓶颈在哪里?
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
腾讯云小微激活硬件生态,携合作产品正式亮相
查看>>
记TensorFlow项目开源一周年
查看>>
「镁客·请讲」1058VR钱朱平:VR泛娱乐的时代未到,不妨从更细分的行业切入
查看>>
刷新本地的DNS缓存数据
查看>>
AI、量子计算引爆硬科技创新,雷鸣、王海峰、施尧耘等北大120周年论道信科最前沿...
查看>>
为什么物联网和区块链彼此依赖?
查看>>
安卓Textview的getLineCount返回0
查看>>
Windows 2008 R2 Administrator access denied解决办法
查看>>
Faker:Python的伪造数据生成器
查看>>
(桌面虚拟化最佳实践--呼叫中心系统优化之四)瘦终端优化项目与其他优化项目...
查看>>
自学社交的人工智能,会不会有一天取人类而代之?
查看>>
centos 6.5下安装fpm打包工具
查看>>
微信的视频如何找到文件并发送到电脑
查看>>
ionic react-native和native开发移动app到底那个好
查看>>
Grid_Oracle Grid Infrastructure概念介绍(概念)
查看>>