译者按:本文是来自一家乌克兰技术公司的文章。该文章译者认为着重在应用上,而非单纯的性能对比。给本身的平台选择一个合适的搜索引擎比任何一个吹嘘技术强大的好。虽然最近一两年 ES发展飞速,但sphinx的简单易用性仍是赢得不少机构公司的青睐,好比优酷土豆都是用sphinx。因此使用以前,务必先了解本身的业务诉求,再选择合适的搜索引擎,而非一昧跟风。翻译如有误请指正,谢谢查看!html
编译自:ELASTICSEARCH VS. SOLR VS. SPHINX: BEST OPEN SOURCE SEARCH PLATFORM COMPARISONgit
做者:Anna Klimenkogithub
从业务角度来看,您应该将高效的搜索引擎视为一种强大的工具,可以提升转换率并为网站全部者带来更多利润。若是您的网站搜索机制没有提供相关结果或搜索性能过低,用户将离开网站并转到其竞争对手。算法
那么,什么是高效的搜索引擎?数据库
搜索的主要目的是检索与用户查询最相关的匹配,排除网站上的其余常规内容。apache
在当前搜索引擎中能够得到的功能中,最受欢迎的是:api
[建议和突出显示 彭博]浏览器
系统应该可以经过使用范围(价格,日期,大小等),排序(按受欢迎程度,日期,价格)和过滤(仅包括所需参数)来缩小搜索范围。缓存
当咱们谈论信息动态变化的网络应用程序(价格,描述细节,商品的可用性)时,近乎实时的更新是很是重要的; 例如,在电子商务或预订引擎中显示库存中可用的商品和服务。安全
除了上面列出的通常功能外,引擎还能够在查找用户最感兴趣的产品或信息时提供建议,以改善用户体验。
当前大约有20个搜索引擎可供选择,可是,若是您正在为您的Web应用程序寻找可靠而有效的解决方案,咱们建议您使用如下三种方法之一:Elasticsearch,Solr或Sphinx – 这是2018年最流行的三种引擎。
这三个都是开源搜索解决方案,获得了他们的贡献者社区的充分支持。它们都具备高性能,可扩展性和灵活性,且具备其特性。
咱们不会像Sphinx vs Solr,Solr vs Sphinx或Sphinx vs Elasticsearch那样进行比较,由于它们都是不错的竞争对手,具备几乎相同的性能,可扩展性和功能。可是它们中的每个都具备特定的特性,能够对您的项目产生影响。如今,让咱们来看看哪一个选项对您的业务更有利。
Elasticsearch是2018年搜索引擎评级的绝对领导者,经过可以在任何环境中工做,证实了其真正“有弹性”的名称。它是一种开源技术,使用的是Apache Lucene库。
许多世界知名公司都将Elastic用于其应用程序。在这里你能够找到这样的名字 TripAdvisor, Shopify, Mozilla, Foursquare, Etsy, Github, SoundCloud, eBay, Yelp, and Netflix, 等等。
1.近实时索引
Elasticsearch可以几乎当即(在不到1秒内)快速索引快速变化的数据。在数据库不断更新的项目中使用它是合适的。
例如,在优步,Elasticsearch实时汇总动态(激增)订价和供应定位的业务指标。它可以在高峰时间每秒处理超过1,000个查询。
当数据库增加时,查找起来就变得更加困难。可是当您的数据库变大时,Elasticsearch会扩展,所以搜索速度不会下降。
Expedia的,最大的酒店和机票聚合之一,经过提供最高追求,天天1TB具备每秒300K的事件。在Elasticsearch的帮助下,他们成功地改善了客户的预订体验。
ES不只能够用做索引器,还能够用做数据存储器。尽管如此,咱们不建议将其用做主存储,而且咱们仍然将数据保存在主数据库中以得到更好的安全性和可靠性,仅使用ES来索引数据和存储日志。
例如, Florida.com,咱们的客户之一和汇总佛罗里达度假村全部信息的应用程序,支持庞大的酒店,餐馆,活动,景点,体育,交易等数据库。使用Elasticsearch,咱们的数据库中存储的数据可快速编入索引并可搜索用户马上。
这是今天在ES中完美实现的时尚功能之一。Elastic Stack(ES,Logstash和Kibana插件的组合)是分析的绝佳工具。它容许实时监控应用程序上的流量(访问者总数,惟一访问者数量,IP地址,最多见的查询,大多数请求的页面,使用的设备和浏览器,按时间显示的流量日志等等) 。
此信息在仪表板中的彩色图表,地图和表格中可视化。这对于与分布式团队合做很是有帮助,由于每一个人均可以当即查看最新信息,而后使用这些数据更好地了解您的受众并改进产品的内容和用户体验。
在ES的帮助下,The Guardian拥有一个强大的分析系统,天天可以处理4000万个文档,以建立内容消费的愿景。
在Netflix,在高峰时段有800万个事件和每秒24GB,ES用于视频查看活动,UI活动,错误日志,性能,诊断事件等事件的实时分析。
Elastic Stack也是一款出色的安全分析工具。近实时日志分析和可视化使您能够识别安全威胁(Web服务器出现问题,连接断开,未经受权访问的尝试,攻击位置等)。您能够今后官方弹性视频中了解更多信息。
经过迁移到ES,戴尔经过确保只有受权人员才能访问其群集来提升安全性。戴尔还将其服务器数量减小了25-30%。
Elasticsearch能够受益于X-Pack商业插件提供的机器学习功能。机器学习算法专一于时间序列数据中的异常检测和异常检测。
Amazon Elasticsearch Service能够快速轻松地进行设置,并在云中运行和扩展Elasticsearch,而无需配置您本身的服务器。
虽然Elastic目前排名第一,但它仍然是一项年轻的技术。并不是全部想要的功能都是开箱即用的,许多功能须要经过自行扩展。例如,ES没有“您是否是意味着什么?”功能。
Solr是另外一个基于Apache Lucene的搜索引擎,所以它与Elasticsearch有许多共同的特性。可是,他们在建筑方面仍然不一样。
使用Solr的公司包括 Cnet, CitySearch, Bloomberg, Magento, Zappos, AOL, eTrade, Disney, Apple, NASA, MTV, 和其余人。
Solr拥有很是棒的搜索功能,这使得该解决方案很是适合像Zappos这样的电子商务网站,这些网站使用Solr搜索和导航150,000种鞋子和其余产品。
Solr能够开箱即用,具备高度可配置性(甚至超过Elasticsearch)的丰富的全文搜索功能。Solr支持各类建议器实现,突出显示功能(在字段中输入的单词的可视指示)和拼写检查器/“你的意思是什么?”(在ES中不存在)。
在Greenice,咱们在为澳大利亚客户开展项目时处理了Solr。他们的网站旨在交流小企业家之间的经验。搜索功能包括突出显示,建议和排序。
[图片来自 SavvySME]
Solr是少数能够阅读丰富内容文档的搜索引擎之一,包括PDF,Word,XML或纯文本。
这很是适合须要查看网站内大量PDF或Word文件的项目(包括合同,简历,学习材料,电子书等)。
香蕉是一种可视化工具( Kibana的一个分支)适用于Solr,容许管理员动态监控仪表板中的事件和日志。
例如,在银行业务中,经理将可以检索有关失败交易的信息,而且几乎“即时”找出每一个问题的缘由,极大地减小了手工工做。这也能够减小对日志的手动搜索。
索尔与合做 彭博,实施机器学习((Learning-to-Rank plug-in) 根据来自更复杂查询的分数,使用文档从新排名的概念。机器学习旨在为用户提供即时搜索最相关公司,人员和新闻的更好体验。
Solr不如Elasticsearch快,而且最适合静态数据(不须要频繁更改)。缘由是缓存。在Solr中,缓存是全局的,这意味着,即便缓存中发生了最微小的变化,全部索引都须要刷新。这一般是一个耗时的过程。另外一方面,在弹性中,刷新是由段组成的。
Sphinx 在2018年的搜索引擎中排名第五,但它仍然是一种强大且流行的技术,在排名方面让位于Elasticsearch和Solr。
Sphinx用于如此着名的系统中 Joomla.org, CouchSurfing.org, Wikimapia.org, Tumblr.com, 以及数百种其余应用。
Sphinx近年来不断发展,已经可以提供近乎实时的搜索。它的速度包括超过500个查询/秒对1,000,000个文档,最大的索引编号估计为250亿个文档。
Craigslist在Sphinx的帮助下,天天提供超过3亿次查询。它每个月的页面浏览量超过500亿。
Infegy使用Sphinx为22亿以上的Twitter,Facebook和各类博客文章编制索引,以提供富有洞察力的社交媒体监控和分析查询。
Sphinx在分面搜索功能方面拥有丰富的经验。
优酷土豆(好歹看到了一个中国的应用^_^)是中国最大的视频网站,它使用Sphinx进行多值属性搜索,每个月向超过4亿用户提供内容,每秒峰值量为15,000个查询。
在Greenice,咱们最近使用Sphinx做为电子商务计算机硬件商店。咱们对品牌,类型,用途,屏幕分辨率,矩阵,对角线,HDD容量,SSD容量等属性实施了多值属性搜索。
若是您须要常规搜索功能,而且不须要任何其余功能,如数据可视化和分析,请使用Sphinx。与使用大量内存的Elasticsearch不一样,使用有限的计算资源索引和查询大量文档很是快速和强大。
其中一个例子是Boardreader,其中Sphinx在37台机器上索引多达160亿个文档。
Sphinx适用于结构化数据(预约义文本字段和非文本属性),但它不是处理非结构化数据(DOC,PDF,MP3等)的项目的最佳选择,由于它须要开发人员花费大量时间和努力配置。这与配置上的其余困难一块儿使得Sphinx的使用不如竞争对手。
如下是Elasticsearch与Solr vs. Sphinx的简要比较:
Elasticsearch | Solr | Sphinx | |
搜索功能的类型 | 1.全文 2.自动完成建议 3.分面 4.多场 5.同义词 6.模糊 7.地理空间 |
1.全文 2.自动完成建议 3.分面 4.多字段 5.同义词 6.模糊 7.突出显示 8.地理空间 9.拼写检查 |
1. 全文 2. 自动完成建议 3. 分面 4. 多字段 5. 同义词(称为字形) 6. 地理空间 7. 突出显示(称为片断) 8. 拼写检查(称为qsuggest) |
实时索引 | 是 | 是 | 是 |
性能 | 高 | 高 | 高 |
可扩展性 | 高 | 高 | 高 |
数据方案 | 无架构* | 是的,可是动态* | 是 |
能够存储 | 是 | 是 | 没有 |
数据可视化 | Elastic Stack (ES,Kibana和Logstash)容许 | Banana插件容许 | 没有 |
机器学习 | 是 | 是 | 没有 |
当您发如今网站中检索查询结果须要一段时间时,可能会对用户体验产生负面影响。
经过为您的数据库配备强大的搜索引擎,您的应用程序的性能将大幅提高。
当代搜索引擎提供复杂的功能,如建议,全文,分面,模糊搜索等,以得到更准确和相关的结果。
如您所见,Elasticsearch,Solr和Sphinx之间的差别很小。它们都实现了它们的主要目的 – 提供有效和快速的搜索。
在咱们处理不一样项目的过程当中测试了许多搜索引擎,咱们如今主要使用Elasticsearch,由于它已证实它对大多数项目具备最佳品质。它快速,灵活且易于使用,不只提供快速和相关的搜索功能,并且能够单独做为存储手段。它很是适合在日志中搜索数据以快速识别应用程序的问题,并实时可视化Web应用程序中正在发生的全部事情。
若是您已经在Solr或Sphinx上有一个项目,那么将它转移到Elasticsearch是没有意义的。不管如何,最好依靠拥有最佳体验而且对其中一个搜索引擎感受更温馨的开发人员。因为全部项目都是独立的,咱们会仔细分析每一个请求,以便为您的任务提供最合适的解决方案。