ElasticSearch7.6学习日记之ElasticSearch简介

ElasticSearch简介

为了搜索和分析,你懂得!

Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎。Logstash和Beats有助于收集、聚合和丰富您的数据并将其存储在Elasticsearch中。使用Kibana,您可以交互式地探索,可视化和共享对数据的见解,并管理和监视堆栈。Elasticsearch是建立索引、搜索和分析发生的地方。

Elasticsearch为所有类型的数据提供实时搜索和分析。无论您是结构化文档还是非结构化文本,数字数据或地理空间数据,Elasticsearch都可以以支持快速搜索的方式有效地存储和索引它。您可以远远超出简单的数据检索和聚合信息,以发现数据中的趋势和模式。随着您的数据和查询量的增长,Elasticsearch的分布式特性使您的部署能够与其一起无缝地增长。

尽管并非每个问题都是搜索问题,但是Elasticsearch都提供了速度和灵活性来处理各种用例中的数据:

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

人们不断使用搜索的新颖方式使我们不断感到惊讶。但是,无论您的用例与其中之一相似,还是正在使用Elasticsearch解决新问题,在Elasticsearch中处理数据,文档和索引的方式都是相同的。

数据输入:文件和索引

Elasticsearch是一个分布式文档存储。Elasticsearch不是将信息存储为列数据行,而是存储已经序列化为JSON文档的复杂数据结构。当群集中有多个Elasticsearch节点时,存储的文档将分布在群集中,并且可以从任何节点立即访问。

存储文档时,它会在1秒内实时索引并完全可搜索。Elasticsearch使用称为倒排索引的数据结构,支持非常快速的全文搜索。倒排索引列出任何文档中出现的每个唯一单词,并标识每个单词出现的所有文档。

索引可以被视为优化的文档集合,每个文档都是字段的集合,这些字段是包含数据的键值对。默认情况下,Elasticsearch会为每个字段中的所有数据编制索引,并且每个索引字段都具有专用的优化数据结构。例如,文本字段存储在反向索引中,数字和地理字段存储在BKD树中。使用每个字段的数据结构来汇编和返回搜索结果的能力使Elasticsearch如此之快。

Elasticsearch还具有无模式的能力,这意味着可以索引文档而无需显式指定如何处理文档中可能出现的每个不同字段。启用动态映射后,Elasticsearch会自动检测并向索引添加新字段。这种默认行为使您可以轻松索引和浏览数据 - 只需开始索引文档,Elasticsearch将检测并将布尔值,浮点和整数值,日期和字符串映射到相应的Elasticsearch数据类型。

但是,最终,您比Elasticsearch更了解您的数据以及您希望如何使用它。您可以定义规则来控制动态映射并显式定义映射,以完全控制字段的存储和索引方式。

定义自己的映射使您能够:

  • 区分全文字符串字段和精确值字符串字段
  • 执行特定于语言的文本分析
  • 优化字段以进行部分匹配
  • 使用自定义日期格式
  • 使用无法自动检测到的数据类型,例如geo_pointgeo_shape

为了不同的目的以不同的方式对同一字段建立索引通常很有用。例如,您可以希望将一个字符串字段索引为全文搜索的文本字段和索引关键字,以便对数据进行排序或汇总。或者,您可以选择使用多个语言分析器来处理包含用户输入的字符串字段的内容。

在索引期间应用于全文字段的分析链也在搜索时使用。查询全文字段时,查询文本在索引中查找术语之前会进行相同的分析。

信息输出:搜索和分析

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

Elasticsearch提供了一个简单,一致的REST API,用于管理您的集群以及索引和搜索数据。为了进行测试,你可以从命令行方式或者通过Kibana中的控制台提交请求。在您的应用程序中,您可以使用ElasticSearch客户端作为您选择的语言:Java,JavaScript,Go,.NET,PHP,Perl,Python或Ruby。

搜索数据

ElasticSearch REST API支持结构化查询、全文查询和结合了两者的复合查询。结构化查询类似于您可以直接在SQL中构造查询字段。例如,您可以搜索索引中的gender和age字段,并按字段employee对匹配项进行排序hire_date。全文查询查找与查询字符串匹配的所有文档,并按相关性对其进行返回 - 与搜索字词的匹配程度。

除了搜索单个术语外,您还可以执行短语搜索,相似性搜索和前缀搜索,并获取自动填充建议。

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

您可以使用Elasticsearch全面的JSON样式查询语言(Query DSL)访问所有这些搜索功能。您还可以构造SQL样式的查询,以在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创建辅助群集,以便在地理位置接近用户时提供读取请求。

跨群集复制是主动 - 被动的。主群集上的索引是活动的leader索引并处理所有写入请求。复制到辅助群集的索引是只读关注者。

维护和管理

与任何企业系统一样,您需要工具来保护,管理和监控您的Elasticsearch集群。集成到Elasticsearch中的安全性,监控和管理功能使您可以将Kibana 用作管理集群的控制中心。类似的特征数据汇总和指标生命周期管理 帮助您明智随着时间的推移管理您的数据。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章