跳转到主要内容
Chinese, Simplified

云、分析和认知搜索时代的开源搜索引擎

Solr与Elasticsearch在我们的客户项目和企业搜索社区中经常讨论。但是随着传统的企业搜索已经发展成为Gartner所说的“洞察引擎”,我们重新讨论了这个主题,提供了结合云、分析和认知搜索能力的最新观察结果,以帮助您评估Solr和Elasticsearch。

Solr是什么?

Solr是Apache软件基金会Lucene项目的一个领先的开源搜索引擎。由于其灵活性、可伸缩性和成本效益,Solr被大型和小型企业广泛使用。

Elasticsearch是什么?

同样基于Lucene的Elasticsearch是另一个领先的开源搜索引擎,支持强大的企业应用程序。Elastic是一家开发Elasticsearch和Elastic Stack的公司,它为搜索、日志分析和其他高级分析用例提供企业解决方案。

选择您的开源搜索引擎

通常,当我们帮助客户执行有关在其企业解决方案中使用开源搜索引擎的评估时,会有人问:“Solr和Elasticsearch哪个更好?”虽然可能会有一种先入为主的观念,认为一个人天生就比另一个人好,但如果用“哪个对我更好?”这样的说法来表述,这个问题就更相关了。

有各种搜索引擎技术可用,但最流行的开源变体是那些依赖于Apache Lucene底层核心功能的技术,从本质上说,这是使搜索引擎工作的部分。Solr和Elasticsearch是搜索库之上的组件,它们为一个完整的搜索产品提供自己的实现和特性。Lucene的核心功能为Solr和Elasticsearch的基本搜索功能提供了相同的体验,但它们围绕Lucene的实现方法创造了不同之处。

搜索引擎的作用已经不仅仅是有效地查找信息,而是在内容分析、预测建模以及与认知/智能搜索功能(如自然语言处理(NLP)、机器学习(ML)和相关性评分)的集成方面发挥关键作用。我们已经在我们的客户工作中探索并实现了这些智能功能——在这里了解更多信息。

Solr和Elasticsearch:哪个对我的组织更好?

这得视情况而定。

围绕一种技术而不是另一种技术的采用有许多用例。但是当被问到这个问题时,我通常会从操作管理的角度用一个类比来回答:“Solr就像Linux。Elasticsearch就像窗户。您可以对Solr进行大量的定制和定制,以满足您的需求,但是与Elasticsearch相比,管理和部署更加复杂,也更加耗费资源。Elasticsearch非常容易部署、管理和监控(使用X-Pack),具有设计良好的用户界面(Kibana),允许数据探索和创建分析可视化,但定制其功能有限,使用插件框架更加困难。

Elasticsearch可以为你,如果你想:

  • 运行迅速与很少开销得得到你的搜索引擎,
  • 尽快开始探索你的数据;和
  • 将分析和可视化作为用例的核心组件。

Solr可能适合你,如果你:

  • 需要对大量数据进行索引和再处理;
  • 有可用的资源来投资管理Solr和用于交互的工具;和
  • 拥有一个与Solr一起工作的现有企业框架(像其他Apache产品,如Hadoop,或企业框架,如构建在Hadoop上的Cloudera、Hortonworks或HDInsights)。

这并不是说一个Hadoop平台不能使用Elasticsearch(我们客户提出了这种情况),但一些平台,Cloudera尤其是Hortonworks,提供额外的工具和方法和管理中的Solr索引数据的生态系统(这是一个特殊的例子Cloudera即将发布的CDH 6支持Solr 7)。

Solr与Elasticsearch:特性比较

从经验来看,评估可以为客户定义战略和实施路线图提供巨大的价值。在我们的评估过程中,我们执行一个搜索引擎比较矩阵,它根据特定客户的需求和用例评估搜索引擎的适用性,并使用基于某些特性的优先级的加权评分机制。基于此分析,在对搜索引擎进行总体推荐时,有一些公共特性和用例可以作为感兴趣的点。

下面的图表展示了一些关于Solr和Elasticsearch的观察结果:

 

  SOLR ELASTICSEARCH
用例
  • 搜索大型数据集,例如,医疗保健(付款人/提供者)、生物制药研究、金融和政府
  • 本机无格式的记录过滤和搜索,例如电子商务或面向客户的搜索
  • 静态数据集搜索
  • 大型散装后处理
  • 日志分析:企业日志消耗和分析,或替代商业现成的日志分析产品
  • 实时仪表盘为经营时间表或销售和市场见解
  • 包含社交媒体和物联网内容的高容量数据流
  • 本机无格式记录过滤器和搜索(电子商务、客户)

可视化

工具

  • Banana (Kibana port)可以提供到Solr 6.x的支持
  • Apache Hue(主要用于Hadoop部署)——Hue搜索应用的新兴功能

 

  • 健壮的可视化开发框架与Kibana
  • 维护和版本匹配的弹性
  • 与Grafana很好的集成,用于分析和监控

云和

大数据

  • 基于云的部署严重依赖管理工具,如Cloudera和Hortonworks
  • 完全托管选项可以通过第三方供应商获得
  • 作为一个Apache项目,Solr很好地集成了其他Apache产品,特别是Hadoop中支持的那些
  • 所有主要的云基础设施提供商(微软Azure、AWS、谷歌云)都提供完全托管和管理的解决方案。
  • 管理工具由云托管提供商提供
  • Elasticsearch Hadoop库允许原生集成Hadoop组件与Elasticsearch

认知

搜索

能力和

整合

 

  • 包括一个机器学习组件(带有X-Pack)
  • 允许模式识别和时间序列预测(ML和Kibana)
  • Learning to Rank (LTR)插件支持机器学习驱动的相关性调优练习
  • Open NLP可以使用与Solr类似的方式作为支持认知搜索功能的外部组件

管理和

运营

  • 总的来说,更难管理(尽管Cloudera Manager在Hadoop环境中帮助了这一点)
  • api不可用(虽然Solr 7支持指标api,但需要JMX)
  • 扩展需要手动干预碎片再平衡(Solr 7有一个自动扩展API,可以对碎片分配和分发进行一些控制)
  • 易于设置和缩放
  • 添加节点后自动重新平衡碎片
  • api为监视和状态评估提供了便利
  • X-Pack提供开箱即用的资源指示板(需要来自Elastic的许可)

开发

架构

  • 优秀的可插拔的体系结构
  • 插件可以很容易地开发和集成
  • 完全开放源码,拥有广泛的社区支持
  • 与Lucene开发的紧密集成
  • 更严格的插件架构
  • 在托管环境中不支持插件
  • 最近通过Elasticsearch core和X-Pack完全开源(X-Pack代码已作为开源发布,但仍需要商业许可才能实现)
  • 在实现Lucene新特性方面稍微滞后
  • 带有附加特性的频繁点发布

集群

状态

管理

  • Zookeeper 仲裁人数:最少需要3个节点;建议根据集群的总体大小选择5到7个
  • 主节点(专有解决方案):至少需要3个节点。它们可以作为独立节点或具有数据节点的双重角色节点存在
安全
  • 用3种方式实现:基本(Zookeeper中的用户名/密码)、Hadoop身份验证(LDAP)或Kerberos
  • 不直接支持LDAP / Active Directory
  • 可以开发自定义插件
 

批量

索引

工具

  • 批处理API操作
  • Cloudera Hadoop: MapReduceIndexerTool (Solr 4.x);HBase批量索引;并引发CrunchIndexerTool
  • 来自Lucidworks的MapReduceIndexerTool (5.x)
  • 只进行批量API操作
  • 可以对配置进行修改,以加速初始批量索引

近实时(NRT)

索引

  • 在Cloudera Hadoop中:Flume和Lily HBase NRT索引器服务
  • Kafka Connect Solr Sink (Confluent)
  • Spark Streaming
  • Apache NiFi / MiNiFi
  • Beats framework
  • Logstash
  • 摄取节点
  • Kafka连接Elasticsearch Sink
  • Spark Stream
  • Apache NiFi / MiNiFi
分析
  • 强facet-based分析
  • 添加了JSON facet,以支持更多的动态聚合和分析功能
  • Solr 7中添加了流表达式,以支持用于并行计算和下游处理的结果输出的流框架
  • 较强的聚合分析能力
  • 支持综合分析(如移动平均线)
  • 提供持续增加的数据(如日志或社交媒体流)的时间序列分析,以洞察趋势和有效性

嵌套的

数据

结构

  • 存在父子文档关系的概念
  • 它们在索引中作为独立的文档存在,以深度嵌套的数据结构限制了它们的聚合功能
  • 深嵌套得到很好的支持
  • 完全结构化的JSON文档可以直接持久化到Elasticsearch中
  • 可以轻松地对嵌套结构执行聚合

查询

操作

  • 主要限于查询URI参数,导致查询复杂(在Solr管理中可调试)
  • 引入了JSON API (Solr 7)来支持基于JSON的查询表达式
  • 请求处理程序可以在Solr配置和Java中简单地定义,以执行与给定查询用例相关的特定和复杂任务
  • 用于编写和表示复杂查询的全功能查询DSL
  • 仅限于JSON
  • 自定义请求处理程序需要开发插件。与Solr中不同,这里不存在来自自定义端点的jar引用的概念
API 交互
  • SolrJ (Java)是维护得最好的最新版本,作为Apache项目的一部分进行维护
  • 其他Apache维护的api: Flare、PHP、Python、Perl
  • 还有其他语言API,但都是由社区维护的,它们在功能上往往落后于SolrJ(最明显的是。net API)
  • 许多api都是由Elastic开发并直接支持的(Java、JavaScript、Groovy、.NET、PHP、Perl、Python、Ruby)
  • 还有其他针对Elasticsearch的社区api(例如c++、Erlang、Go、Haskell、Lua、Perl、R等)。

选择Solr和Elasticsearch?考虑这些

决定哪个搜索引擎最适合您的特定用例和需求,不应该是基于“非此即彼”的假设做出的决定。Solr中某个特定功能的总体重要性可能超过Elasticsearch的操作优势,例如:

在一个客户端案例中,与Solr部署相关的开销和不得不使用过时的SolrNET客户端(当时)被Solr的可插拔特性所抵消。需要定制加密更新和请求处理程序来使用旋转数据加密键对索引内容应用加密,因此必须使用Solr而不是Elasticsearch。索引加密过程所需要的功能并不能在Elasticsearch中有效地实现。

相反,在不考虑大数据或分析的情况下,为通用搜索用例评估搜索引擎选项时,Elasticsearch成为了一个更受欢迎的选择,因为它减少了维护和部署开销,以及完全托管和管理环境的选项。

在一些基于什么对客户最重要的情况下,它不是立即清楚哪个搜索引擎(包括商业引擎)将最好地满足客户的需求,尽管应用了评分规则。在这种情况下,可以使用示例数据集执行“烘烤”,面向客户评估每个引擎对于特定用例集的执行情况。

归根结底,Solr和Elasticsearch都是功能强大、灵活、可扩展且极其强大的开源搜索引擎。总体用例和业务需求,以及您所需的特性、操作考虑,以及与新的认知搜索和分析功能的集成,将最终驱动您决定是选择Solr还是Elasticsearch。

 

原文:https://www.accenture.com/us-en/blogs/search-and-content-analytics-blog/solr-elasticsearch-open-source-search-engines

本文:http://jiagoushi.pro/node/1145

讨论:请加入知识星球【首席架构师圈】或者小号【jiagoushi_pro】

Tags
 
Article
知识星球
 
微信公众号
 
视频号