Elasticsearch入门一:Elasticsearch的基本概念(译)

一.Elasticsearch定义

Elasticsearch是一个开源的高度可扩展的全文搜索和分析引擎。它允许您快速、实时的存储、搜索和分析大数据。它通常为具有复杂的搜索特性和需求的应用提供底层引擎或技术。

Elasticsearch可以用于以下的一些场景:

  • 运营一个网上商城,客户需要在商城中搜索你销售的产品。在这种情况下,你可以使用Elasticsearch去保存你的产品目录和产品,为它们提供搜索和建议。
  • 收集日志或事务数据,并且希望分析和挖掘这些数据,以查找趋势、统计数据、汇总或异常。在这种情况下,你可以使用Logstash去收集、聚合和转换你的数据,然后通过Logstash将数据导入Elasticsearch。一旦将数据导入Elasticsearch,你可以运行搜索和聚合来挖掘你感兴趣的任何信息。
  • 您运行一个价格提醒平台,它允许价格敏感的客户指定规则,比如:我对某个电子产品感兴趣,如果它在一个月内价格低于某个价位,就给我提醒。在这种情况下,您可以提取供应商的价格,将其推入Elasticsearch,并使用其反向搜索(Percolator)功能,根据客户查询匹配价格变动,最终在找到匹配后将消息推送给客户。
  • 您有分析/业务智能需求,并且希望快速调查、分析、可视化,并针对大量数据(想想数以百万计或数十亿计的记录)提出专门的问题。在这种情况下,你可以使用Elasticsearch来存储你的数据,然后使用Kibana来构建自定义仪器表,用来对重要的数据进行可视化。另外,你可以使用Elasticsearch的聚合功能对数据进行复杂的业务智能查询。

二.Elasticsearch基本概念

以下是Elasticsearch的核心,一开始就理解好这些概念将很好的简化学习过程。

实时(Near Realtime)

Elasticsearch 是一个实时的搜索平台。这意味着从索引文档到文档变成可索引的过程仅仅是稍微的延迟(通常一秒钟)。

集群(Cluster)

集群是一个或多个节点(服务器)的集合,这些节点保存整个数据并且提供跨所有节点的联合索引和搜索功能。一个集群有唯一的名称,默认为elasticsearch。如果节点被设置为通过其名称加入集群的话,这个名称就很重要,因为节点只能是集群的一部分。

确保不要在不同的环境中重用相同的集群名称,否则可能会导致节点加入错误的集群。例如,您可以使用logging-dev、logging-stage和logging-prod分别对应开发、测试和生产集群名称。

如果一个集群中只有一个节点,也是有效和合理的。此外,您还可以拥有多个独立的集群,每个集群都有自己独特的集群名称。

节点(Node)

节点是单个服务器,它是集群的一部分,用于存储数据,并参与集群的索引和搜索功能。与集群一样,节点的名称默认为在启动时分配给节点的随机唯一标识符(UUID)。如果你不想要默认的名称,你可以定义为你想要的任意名称。当你想要知道网络中的哪个服务对应于Elasticsearch群中的哪个节点时,就用该名称来区分。

通过配置群名称,节点可以加入特定的集群。默认情况下,每个节点都被设置为加入一个名为elasticsearch的集群。

在一个单独的集群中,你可以配置任意数量的节点。此外,如果当前网络上没有任何节点在运行,默认情况下,启动单个节点将形成一个名为elasticsearch的新单节点集群。

索引(Index)

索引是具有类似特性的文档集合。例如,你可以有一个客户数据的索引,一个产品目录的索引和一个订单数据的索引。索引的名称必须是小写的,此名称用于在对文档执行索引、搜索、更新和删除操作时引用索引。在单个集群中,你可以设置任意数量的索引。

类型(Type)

注:在6.0.0的版本中已经废弃掉了。

类型过去是索引的逻辑类别或分区,允许您在同一索引中存储不同类型的文档。比如一个类型用于保存用户,另一个类型用于保存博客帖子。此类型以后不再使用。

文档(Document)

文档是可以建立索引的基本信息单元。例如,可以为单个客户提供一个文档,为单个产品提供一个文档,为单个订单提供另一个文档。文档用JSON的形式表示,它是互联网中最普遍的数据交换格式。在索引中,你可以任意数量的文档。请注意,尽管文档在物理上驻留在索引中,但实际上文档必须被索引分配到索引中的类型中。

碎片和副本(Shards & Replicas)

索引可能存储大量数据,从而超出单个节点的硬件限制。例如,一个包含10亿个文档的索引占用了1TB的磁盘空间,它可能不适合于单个节点的磁盘,或者单个节点提供搜索请求时效率太慢。

为了解决这个问题,Elasticsearch提供了将索引细分为多个碎片的功能。当您创建索引时,您可以简单地定义您想要的碎片的数量。每个碎片本身都是一个功能齐全、独立的“索引”,可以驻留在集群中的任何节点上。

切分存在的两大重要原因:

  • 允许水平切分或缩放内容
  • 允许在碎片(可能在多个节点上)之间分发和并行化操作,从而提高性能/吞吐量

碎片如何分布以及如何将其文档聚合回搜索请求的机制完全由Elasticsearch管理,对用户来说是透明的。

在任何时候都可能出现故障的网络/云环境中,有一个故障转移机制是非常有用的,强烈建议在碎片/节点脱机或因任何原因消失的情况下使用该机制。

为此,Elasticsearch允许您将索引碎片的一个或多个副本复制到所谓的复制碎片中,或简称为副本。

复制存在的两大重要原因:

  • 它提供了在碎片/节点失败时的高可用性。出于这个原因,需要注意的是,复制碎片从来不与复制它的原始/主碎片在同一个节点上分配
  • 可以扩展搜索量/吞吐量,因为搜索可以在所有副本上并行执行

总而言之,每个索引可以分成多个碎片。一个索引也可以被复制零次或多次。一旦复制,每个索引将具有主碎片(从原始碎片复制而来的)和复制碎片(主碎片的副本)。

在创建索引时,每个索引可以定义碎片和副本的数量。创建索引之后,还可以随时动态更改副本的数量。您可以使用_shrink和_split api更改现有索引的碎片数量,但是这不是一项简单的任务,预先计划正确的碎片数量是最佳方法。

默认情况下,Elasticsearch中的每个索引分配5个主碎片和1个副本,这意味着如果集群中至少有两个节点,那么索引将有5个主碎片和5个副本碎片(1个完整副本),每个索引总共有10个碎片。

原文地址:

       https://www.elastic.co/guide/en/elasticsearch/reference/5.4/getting-started.html

猜你喜欢

转载自blog.csdn.net/sunjian1122/article/details/81902120