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