• 周二. 12 月 10th, 2024

    Elasticsearch 介绍

    root

    11 月 30, 2021 #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_point和geo_shape

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

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

    信息输出:搜索和分析

    虽然您可以使用Elasticsearch作为文档存储并检索文档及其元数据,但真正强大的功能是能够轻松访问构建在Apache Lucene搜索引擎库上的完整搜索功能套件。

    Elasticsearch提供了一个简单、一致的REST API,用于管理集群、索引和搜索数据。出于测试目的,您可以轻松地直接从命令行或通过Kibana的Developer Console提交请求。在您的应用程序中,您可以使用Elasticsearch客户端来选择您的语言:Java、JavaScript、Go、。net、PHP、Perl、Python或Ruby。

    搜索你的data

    Elasticsearch REST api支持结构化查询、全文查询和将两者结合起来的复杂查询。结构化查询与可以在SQL中构造的查询类型类似。例如,您可以在员工索引中搜索性别和年龄字段,并根据hire_date字段对匹配进行排序。全文查询查找与查询字符串匹配的所有文档,并按相关度返回它们——它们与搜索词的匹配程度。

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

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

    您可以使用Elasticsearch的综合json风格的查询语言(query DSL)访问所有这些搜索功能。您还可以构造SQL风格的查询来搜索和聚合Elasticsearch内部的本地数据,JDBC和ODBC驱动程序允许广泛的第三方应用程序通过SQL与Elasticsearch交互。

    分析你data

    弹性搜索聚合使您能够构建复杂的数据摘要,并深入了解关键指标、模式和趋势。聚合不仅仅是寻找谚语所说的“大海捞针”,它使你能够回答以下问题:

    干草堆里有多少根针?

    针的平均长度是多少?

    针的中位数长度是多少?

    在过去的六个月里,每个月有多少根针被加到干草堆里?

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

    你们最受欢迎的针厂是哪些?

    有没有不寻常或异常的针叶团块?

    由于聚合利用与搜索相同的数据结构,所以它们的速度也非常快。这使您能够实时分析和可视化数据。您的报告和指示板会随着数据的变化而更新,这样您就可以根据最新的信息采取行动。

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

    但是等等,还有更多的编辑

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

    与数值、计数或频率的时间偏差有关的异常

    统计罕见

    群体成员的不寻常行为

    最棒的部分是什么?您不需要指定算法、模型或其他与数据科学相关的配置就可以做到这一点。

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

    Elasticsearch是建立总是可用的,并与您的需求进行伸缩。它是通过自然分布来做到这一点的。您可以向集群中添加服务器(节点)来增加容量,Elasticsearch会自动将数据和查询负载分布在所有可用节点上。不需要彻底修改应用程序,Elasticsearch知道如何平衡多节点集群,以提供规模和高可用性。节点越多,越快乐。

    这是如何工作的?在幕后,Elasticsearch索引实际上只是一个或多个物理碎片的逻辑分组,其中每个碎片实际上是一个自包含索引。通过跨多个分片分布索引中的文档,并将这些分片分布到多个节点,Elasticsearch可以确保冗余,这既可以防止硬件故障,又可以在将节点添加到集群时增加查询容量。当集群增长(或收缩)时,Elasticsearch自动迁移碎片以重新平衡集群。

    有两种类型的碎片:原始碎片和副本碎片。索引中的每个文档都属于一个主碎片。复制碎片是主碎片的副本。副本提供数据的冗余副本,以防止硬件故障,并增加处理读取请求(如搜索或检索文档)的能力。

    索引中主碎片的数量在创建索引时是固定的,但复制碎片的数量可以在任何时候改变,而不会中断索引或查询操作。

    这取决于编辑…

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

    查询大量的小碎片可以使每个碎片的处理速度更快,但是更多的查询意味着更多的开销,所以查询较少数量的大碎片可能更快。总之,看情况而定。

    作为出发点:

    目标是保持平均shard大小在几GB和几十GB之间。对于基于时间的数据的用例,通常看到的碎片大小在20GB到40GB之间。

    避免大量碎片问题。一个节点可以容纳的碎片数量与可用堆空间成比例。作为一般规则,每GB堆空间的碎片数量应该小于20个。

    为您的用例确定最佳配置的最佳方法是使用您自己的数据和查询进行测试。

    以防万一

    集群的节点之间需要良好、可靠的连接。为了提供更好的连接,通常将节点放在同一个数据中心或附近的数据中心中。然而,为了保持高可用性,还需要避免任何单点故障。在一个位置发生重大中断时,另一个位置的服务器需要能够接管。答案吗?Cross-cluster复制(CCR)。

    CCR提供了一种方法,可以将索引从主集群自动同步到可作为热备份的辅助远程集群。如果主集群发生故障,备用集群可以接管。您还可以使用CCR来创建次要集群,以在地理位置接近用户的情况下为读请求提供服务。

    跨集群复制是主备复制。主集群上的索引是活动的leader索引,并处理所有的写请求。复制到次要集群的索引是只读跟随者。

    保健和feeding

    与任何企业系统一样,您需要工具来保护、管理和监视您的Elasticsearch集群。集成到Elasticsearch中的安全性、监视和管理特性使您能够使用Kibana作为管理集群的控制中心。数据汇总和索引生命周期管理等特性可以帮助您随时间智能地管理数据。

    root