ElasticSearch 7 权威指南(一)什么是Elasticsearch ?

宋翔
2023-12-01

译者序

公司项目中用到 ElasticSearch,便查找资料学习 ES,现在市面上的一些中文书籍,都基于非常陈旧的版本,官方文档中的中文版《权威指南》也是基于 2.X 版本,而目前版本已经到了7.X,非常多的特性与之前版本大相庭径,这就导致文档中有很多示例会返回警告,甚至不能成功运行,而且我觉得现有的《权威指南》,翻译质量不是非常流畅,于是打算将目前官方文档基于 7.8 版本的权威指南翻译成中文版,以供大家一起学习。

什么是Elasticsearch

Elasticsearch是一个分布式、可扩展、实时的搜索与数据分析引擎,它是 Elastic Stack 套件的最核心组件,我们可以通过Logstash和Beats来收集、聚合和丰富您的数据,并将其存储在Elasticsearch中,还可以通过Kibana交互式的探索可视化的数据,并管理、监控Elasticsearch堆栈信息,让我们一起感受 Elasticsearch 的魔力吧,无论是索引、搜索、分析数据。

Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论您是结构化文本、非结构化文本、数字数据还是地理空间数据,Elasticsearch都可以高效地对其进行存储和索引,便于快速搜索。您不仅可以进行简单的数据检索,还可以通过聚合信息来发现数据的趋势和模式。随着数据量和查询量的增长,Elasticsearch的分布式特性也可以让你的系统能力随之灵活扩展。

尽管并非每个问题都是搜索问题,但是 Elasticsearch 也提供了快速和灵活的方案来处理五花八门的数据:

  • 将搜索框添加到应用程序或网站
  • 存储和分析日志、可度量指标、安全事件等数据。
  • 使用机器学习对行为数据进行实时自动建模。
  • 使用Elasticsearch作为存储引擎自动执行业务工作流。
  • 使用Elasticsearch作为地理信息系统(GIS)管理、集成和分析空间信息。
  • 使用Elasticsearch作为生物信息学研究工具存储和处理遗传数据

我们一直对人们以新奇的方式来使用搜索感到惊讶,但是无论您的使用场景是否跟上面类似,亦或您正在使用Elasticsearch解决新问题,在Elasticsearch中处理数据,文档和索引的方式都不会有什么不同。

信息的输出:搜索和分析

虽然您可以用Elasticsearch来存储、检索文档及其元数据,但其真正的强大之处在于能够轻松访问构建在Apache Lucene搜索引擎库之上的全套搜索功能。

Elasticsearch提供了一个简单,一致的REST API,用于管理您的集群以及索引和搜索数据。为了测试,您可以直接通过shell或者Kibana中的Dev Tools控制台轻松的提交请求。你可以在自己的应用程序中通过REST API接口访问Elasticsearch服务器,不管是下列哪种语言都可以:Java,JavaScript,Go,.NET,PHP,Perl,Python或Ruby。

搜索数据

Elasticsearch REST API支持结构化查询,全文搜索,以及两者复合查询。结构化查询类似于SQL查询,例如,您可以查询employee索引中gender和age字段,搜索结果根据hire_date字段排序。全文搜索查找跟搜索词匹配的所有文档,结果根据相关性(搜索词的匹配程度)排序。

除了搜索单个词条之外,您还可以进行短语搜索、相似性搜索和前缀搜索,并获得自动补全建议。

想要搜索地理空间数据或其他数字数据?ElasticSearch能够在支持高性能地理和数字查询的优化数据结构中索引非文本类数据。

您可以用全JSON风格的查询语句(Query DSL)来访问Elasticsearch的搜索功能。目前有些第三方应用程序还会通过 JDBC 和 ODBC 驱动来构造类似SQL的查询语句来搜索和聚合Elasticsearch数据。

分析数据

Elasticsearch聚合使您能够对数据进行多种复杂形式的汇总。通过汇总结果我们可以深入了解数据的关键指标,内在模式和发展趋势,通过聚合,您可以回答如下问题,而不仅仅像“大海捞针”般毫无头绪:

  • 大海里一共有多少根针?
  • 针的平均长度是多少?
  • 按制造商分类,针头的中位数长度是多少?
  • 在过去的六个月里,每个月都有多少针被扔进到大海中?

您还可以使用聚合来回答更细微的问题,例如:

  • 哪家针头制造商最受欢迎?
  • 有没有不寻常或异常的针头?

由于聚合利用了用于搜索的相同数据结构,因此它们也非常快。这使您能够实时分析和可视化您的数据。您的报告和表单会随着数据的更改而立马更新,这样您可以根据最新信息采取有针对性的措施。

更重要的是,聚合与搜索请求一起运行。您可以在单个请求中对相同的数据同时搜索文档、过滤结果和执行分析。因为聚合是在特定搜索的上下文中计算的,所以您不仅显示了所有尺寸为70的针的数量,还显示了符合用户搜索条件的尺寸为70的针的数量,比如所有尺寸为70的不粘刺绣针。

更多功能

是否想自动分析您的时间序列数据?您可以使用机器学习功能在数据中创建正常行为的准确基准,并识别异常模式。通过机器学习,您可以检测到:

  • 与值,计数或频率的时间偏差有关的异常。
  • 统计稀缺性。
  • 成员的异常行为

最棒的是什么?您无需指定算法、模型或其他与数据科学相关的配置即可完成此操作。

可伸缩性:集群,节点和分片

Elasticsearch通过分布式来构建高可用、可扩展的搜索引擎,您可以往集群添加服务器(节点)来横向扩展Elasticsearch的能力,你无需修改任何应用代码,Elasticsearch可以自动在所有的节点均衡的分配数据和查询请求,他知道如何平衡群集中节点的负载以提供可扩展性和高可用性。节点越多,性能会越好。

这是如何运作的?实际上,Elasticsearch索引只是一个或多个物理分片上的逻辑分组,其中每个分片都是一个独立的索引。通过将索引中的文档分布在多个分片中,并将这些分片分布在多个节点上,Elasticsearch可以确保冗余,这既可以防止硬件故障,又可以在集群添加节点时增加查询能力。随着集群(节点)的增长(或缩小),Elasticsearch会自动迁移分片以重新平衡集群。

分片分两种类型:主分片和副本分片,索引中的每个文档都属于一个主分片。副本分片是主分片的副本。副本提供冗余的数据以防止硬件故障,还可以增加读并发能力,(如搜索或检索文档)。

索引中的主分片数量在索引创建时就固定了,但副本分片数量可以随时更改,而不会中断索引或查询操作。

分片配置取决于什么?

在分片大小和为索引配置的主分片数量方面,存在许多性能方面的考虑和权衡取舍。分片越多,维护这些索引的开销就越大。分片大小越大,当Elasticsearch需要重新平衡集群时,迁移分片所需的时间就越长。

查询大量小分片会使每个分片的处理速度更快,但是更多的查询意味着更多的开销,因此查询较小数量的大分片可能会更快。总之,具体问题具体分析。

注意以下两点:

  • 将平均分片大小控制在几GB到几十GB之间。对基于时间序的数据,常用的是大小在20GB到40GB范围内的分片。
  • 避免大分片问题。一个节点可以容纳的分片数量与可用的堆空间成正比。一般来说,每GB堆空间的分片数量应该少于20个。

为您的场景确定最佳配置的最好办法就是,添加您的测试数据,然后测试各种查询,实践是检验真理的唯一标准。

发生灾难怎么办?

出于性能考虑,最好是将集群的节点都置于同一网络上,夸网络的节点之间平衡集群分片耗时太长。然而高可用架构要求您避免将所有鸡蛋放在一个篮子中。一个机房发生重大停机的情况下,另一个机房的服务器必须能够接管。如何做到?跨集群复制(CCR)。

CCR提供了一种方法,可以自动将索引从主集群同步到可以用作热备份的辅助远程集群。 如果主群集发生故障,则辅助群集可以接管。 您还可以使用CCR创建辅助群集,以接近地理位置的方式向用户提供读取请求。就像CDN。

跨集群复制是主动-被动模式。主群集上的索引是active leader 索引,用于处理所有写入请求,索引数据会被动同步到辅助集群,作为 follower 来处理所有的读请求。

集群的监控与管理

与任何企业系统一样,您需要工具来保护、管理和监控Elasticsearch集群。实际上这些功能都已经被集成到Elasticsearch中了,Kibana可以利用Elasticsearch的这些能力,并提供可视化的管理控制界面,来管理、控制集群。还有些特性可以用来帮助您随着时间的推移智能的管理数据,例如数据归档和索引生命周期管理。

 类似资料: