1、索引

ElasticSearch将数据存储在一个或多个索引(index)中,这里的索引就像SQL领域的数据库,例如:MySQL里的一个database。

ElasticSearch内部使用Apache Lucenu将数据写入索引或从索引中读取数据。需要注意的是,ElasticSearch中的索引可能有一个或多个Lucene索引构成,具体由索引分片(shard)、复制(replica)机制及其配置决定。

2、文档

文档(document)是ElasticSearch中的主要实体。对于所有使用ElasticSearch的场景,最终都会归结到对文档的搜索之上。

文档由字段构成,每个字段包含字段和一个或多个字段值(这种情况下,该字段被称为是多值的,即文档中有多个同名字段)。文档之间可能有各自不同的字段集合,文档没有固定的结构或模式。

从客户端的视角来看,文档就是一个json对象。

3、类型

ElasticSearch中每个文档都有自己的类型(type)定义。一个索引中允许存储多种类型的文档,并为不同文档类型提供不同的映射。

类型就像SQL数据库中的一个数据表。

4、映射

所有文档在写入索引前都将被分析,而映射则存储着所有分析链所需要的全部信息。例如,如何将输入文本分割为词条,哪些词条应该被过滤掉,或哪些附加处理有必要被调用(例如处理HTML标签)等。

5、节点

单个的ElasticSearch服务实例被称为节点(node)。大多数情况下,一个ElasticSearch节点就能够满足我们大多数的需求,但是考虑到容错性和数据快速膨胀,我们需要搭建ElasticSearch集群。

ElasticSearch节点可以按用途分为3类。

  • 数据(data)节点:用来存放数据,提供数据的搜索能力。
  • 主(master)节点:作为监控节点负责控制其他节点的工作。
  • 部落(tribe)节点:负责串联起多个集群,使得我们在多个集群上执行几乎所有可以在单集群ElasticSearch上执行的功能。

6、集群

多个协同工作的ElasticSearch节点的集合被称为集群(cluster)。

ElasticSearch的分布式属性使得我们可以轻松处理超过单机负载能力的数据量。同时,集群也是一种无间断提供服务的一种解决方案,即便当某些节点因为宕机或执行管理任务(例如升级)不可用时,ElasticSearch几乎是无缝继承了集群功能。

7、分片

ElasticSearch集群允许系统存储的数据总量超过单机容量,为了实现这个功能,ES将数据散布到多个物理的Lucene索引上去,这些Lucene索引被称为分片(shard),散布这些分片的过程叫做分片处理(sharding)。ElasticSearch会自动完成分片工作,对用户来说分片更像是一个大的索引。

当然,除了ElasticSearch自动进行分片处理外,用户为具体的应用进行参数调优也至关重要,因为分片的数量在索引创建时就被配置好了,之后无法改变,除非创建一个新索引并重新索引全部数据。

8、副本

分片处理允许用户推送超过单机容量的数据至ElasticSearch集群。副本(replica)则解决了访问压力过大时单机无法处理所有请求的问题。

实现方法很简单,为每个分片创建冗余的副本,处理查询时可以把这些副本当做最初的主分片(primary shard)使用。

如果主分片所在的主机宕机了,ElasticSearch会自动从该分片的副本中选出一个当做新的主分片,不会中断索引和搜索服务,并且可以在任意时间节点添加或删除副本,可随时调整副本的数量。

扫码关注李苦李公众号

李苦李公众号

标签: ElasticSearch

添加新评论