文章摘要(AI生成)
什么是ES你知道的,用于搜索(和分析)Elasticsearch 是 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,
什么是ES
你知道的,用于搜索(和分析)
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 中的开发者控制台轻松提交请求。在您的应用程序中,您可以使用适合您选择的语言的Elasticsearch 客户端:Java、JavaScript、Go、.NET、PHP、Perl、Python 或 Ruby。
搜索您的数据
Elasticsearch REST API 支持结构化查询、全文查询以及两者结合的复杂查询。结构化查询类似于您可以在 SQL 中构建的查询类型。例如,您可以搜索索引中的gender
和age
字段,并按字段hire_date
对匹配项employee
进行排序。全文查询查找与查询字符串匹配的所有文档,并返回按相关性排序的文档- 它们与您的搜索词的匹配程度。
除了搜索单个术语之外,您还可以执行短语搜索、相似性搜索和前缀搜索,并获得自动完成建议。
您有要搜索的地理空间或其他数字数据吗?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 创建辅助集群来处理与用户地理位置接近的读取请求。
跨集群复制是主动-被动的。主集群上的索引是活动领导索引并处理所有写入请求。复制到辅助集群的索引是只读追随者。
维护和管理
与任何企业系统一样,您需要工具来保护、管理和监控您的 Elasticsearch 集群。集成到 Elasticsearch 中的安全、监控和管理功能使您能够使用Kibana 作为管理集群的控制中心。数据汇总和索引生命周期管理等功能 可帮助您随着时间的推移智能地管理数据。
评论区