Elasticsearch介绍
Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎。 Logstash和Beats有助于收集,聚合和丰富您的数据并将其存储在Elasticsearch中。 Kibana使您能够以交互方式探索,可视化和分享数据,并管理和监控Stack。Elasticsearch是索引,搜索和分析。
Elasticsearch为所有类型的数据提供实时搜索和分析。无论您是结构化文档还是非结构化文本,数字数据或地理空间数据,Elasticsearch都可以以支持快速搜索的方式有效地存储和索引它。您可以远远超出简单的数据检索和聚合信息,以发现数据中的趋势和模式。随着您的数据和查询量的增长,Elasticsearch的分布式特性使您的部署能够与其一起无缝地增长。
虽然不是每个问题都是搜索问题,但Elasticsearch提供了处理各种用例数据的速度和灵活性:
- 将搜索框添加到应用或网站
- 存储和分析日志,指标和安全事件数据
- 使用机器学习实时自动建模数据行为
- 使用Elasticsearch作为存储引擎自动化业务工作流程
- 使用Elasticsearch作为地理信息系统(GIS)管理,集成和分析空间信息
- 使用Elasticsearch作为生物信息学研究工具存储和处理遗传数据
我们对人们使用搜索的新颖方式感到惊讶。但是,无论您的用例是否与其中一个相似,或者您使用Elasticsearch来解决新问题,您在Elasticsearch中处理数据,文档和索引的方式都是相同的。
数据:文件和索引
Elasticsearch是一个分布式文档存储。Elasticsearch不是将信息存储为列数据行,而是存储已经序列化为JSON文档的复杂数据结构。当群集中有多个Elasticsearch节点时,存储的文档将分布在群集中,并且可以从任何节点立即访问。
存储文档时,它会在1秒内实时索引并完全可搜索。Elasticsearch使用称为倒排索引的数据结构,支持非常快速的全文搜索。倒排索引列出任何文档中出现的每个唯一单词,并标识每个单词出现的所有文档。
索引可以被视为优化的文档集合,每个文档都是字段的集合,这些字段是包含数据的键值对。默认情况下,Elasticsearch会为每个字段中的所有数据编制索引,并且每个索引字段都具有专用的优化数据结构。例如,文本字段存储在反向索引中,数字和地理字段存储在BKD树中。使用每个字段的数据结构来汇编和返回搜索结果的能力使Elasticsearch如此之快。
信息输出:搜索和分析
虽然您可以将Elasticsearch用作文档存储并检索文档及其元数据,但真正的强大功能来自于能够轻松访问基于Apache Lucene搜索引擎库构建的全套搜索功能。
Elasticsearch提供了一个简单,一致的REST API,用于管理集群,索引和搜索数据。出于测试目的,您可以直接从命令行或通过Kibana中的Developer Console轻松提交请求。从您的应用程序中,您可以使用Elasticsearch客户端作为您选择的语言:Java,JavaScript,Go,.NET,PHP,Perl,Python或Ruby。
搜索数据
Elasticsearch REST API支持结合了两者的结构化查询,全文查询和复杂查询。结构化查询类似于可以在SQL中构造的查询类型。例如,您可以搜索员工索引中的性别和年龄字段,并按hire_date字段对匹配项进行排序。全文查询查找与查询字符串匹配的所有文档,并按相关性对其进行排序 - 它们与您的搜索字词的匹配程度如何。
除了搜索单个术语外,您还可以执行短语搜索,相似性搜索和前缀搜索,并获取自动填充建议。
是否要搜索地理空间或其他数字数据?Elasticsearch将优化数据结构中的非文本数据编入索引,以支持高性能的地理和数字查询。
您可以使用Elasticsearch的全面JSON样式查询语言(查询DSL)访问所有这些搜索功能。您还可以构建SQL样式的查询以在Elasticsearch内本地搜索和聚合数据,JDBC和ODBC驱动程序使各种第三方应用程序能够通过SQL与Elasticsearch进行交互。
分析数据
通过Elasticsearch聚合,您可以构建复杂的数据摘要,并深入了解关键指标,模式和趋势。
由于聚合利用了用于搜索的相同数据结构,因此它们也非常快。这使您可以实时分析和可视化数据。您的报告和仪表板会随着数据更改而更新,以便您可以根据最新信息采取措施。
更重要的是,聚合与搜索请求一起运行。您可以在同一数据中,在单个请求中同时搜索文档,过滤结果和执行分析。并且因为聚合是在特定搜索的上下文中计算的,所以您不仅要显示所有70针的数量,而是显示与用户的搜索条件匹配的70针的数量 - 例如,所有尺寸70不粘刺绣针。
可伸缩性和弹性:集群,节点和分片
Elasticsearch始终可用,可根据您的需求进行扩展。它通过自然分配来实现这一点。您可以将服务器(节点)添加到群集以增加容量,Elasticsearch会自动在所有可用节点上分配数据和查询负载。无需彻底检查您的应用程序,Elasticsearch了解如何平衡多节点群集以提供规模和高可用性。节点越多,越好。
这是如何运作的?在封面下,Elasticsearch索引实际上只是一个或多个物理分片的逻辑分组,其中每个分片实际上是一个自包含的索引。通过跨多个分片在索引中分发文档,并将这些分片分布在多个节点上,Elasticsearch可以确保冗余,这可以防止硬件故障,并在节点添加到群集时提高查询容量。随着集群的增长(或收缩),Elasticsearch会自动迁移分片以重新平衡集群。
有两种类型的分片:原色和副本。索引中的每个文档都属于一个主分片。副本分片是主分片的副本。副本提供数据的冗余副本,以防止硬件故障并增加服务读取请求(如搜索或检索文档)的容量。
索引中的主分片数在创建索引时是固定的,但副本分片的数量可以随时更改,而不会中断索引或查询操作。
万一发生灾难
出于性能原因,群集中的节点需要位于同一网络上。在不同数据中心的节点之间平衡群集中的分片只需要太长时间。但是高可用性架构要求您避免将所有鸡蛋放在一个篮子里。如果在一个位置发生重大中断,则另一个位置的服务器需要能够接管。无缝连接。答案?跨群集复制(CCR)。
CCR提供了一种自动将索引从主群集同步到可作为热备份的辅助远程群集的方法。如果主群集出现故障,则辅助群集可以接管。您还可以使用CCR创建辅助群集,以便在地理位置接近用户时提供读取请求。
跨群集复制是主动 - 被动的。主群集上的索引是活动的leader索引并处理所有写入请求。复制到辅助群集的索引是只读关注者。
Care and feeding
与任何企业系统一样,您需要工具来保护,管理和监控您的Elasticsearch集群。集成到Elasticsearch中的安全性,监控和管理功能使您可以将Kibana用作管理集群的控制中心。数据汇总和索引生命周期管理等功能可帮助您智能地管理数据。