核心概念

索引(Index)

一个索引就是拥有相似特征的文档集合。例如,客户数据索引、产品目录索引、订单索引。一个索引由一个名字来标识(必须全部是小写字母)。在集群中科院定义任意多的索引。
ES索引的精髓:一切设计都是为了提高搜索的性能

类型(Type)

在之前的版本为了对应关系型数据库而存在

文档(Document)

一个文档是一个可被索引的基础单元,也就是一条数据。比如某一个客户的文档。文档以JSON(Javascript Object Notation)格式表示。
在一个index/type里,可以存储任意多的文档

字段(Field)

相当于数据表的字段,对文档数据根据不同属性进行分类标识

映射(Mapping)

mapping是处理数据的方式和规则方面做出一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等。这些都是映射里可以设置的,其它就是处理ES数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大。

分片(Shards)

一个索引可以存储超过单个节点限制的大量数据。比如,需要1TB的磁盘空间存放文档数据,但任一节点都没有这么大的空间。或单个节点处理搜索请求太慢,为解决这些问题,ES提供将索引划分为多份的能力。当你创建一个索引,你可以指定想要分片的数量。每个分片本身也是一个功能完善的独立索引,这个“索引”可以被放置到集群中的任何节点上。

  • 允许水平分割/扩展内容容量
  • 允许在分片的基础上进行分布式、并行操作,提高性能/吞吐量

    副本(Replicas)

    在网络环境中,失败随时可能发生。ES允许创建分片的一份或多份拷贝(副本)

  • 提高了可用性。副本与 源/主要(original/primiary)分片 不置于同一个节点

  • 扩展吞吐量,搜索可以在所有副本上并行运行

    分配(Allocation)

    将分片分给某个节点的过程,包括分配主分片或副本。如果是副本,还包括从主分片复制数据的过程。这个过程是由master节点完成的。

    系统架构

    image.png
    一个运行中的 Elasticsearch 实例称为一个节点, 而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者 从集群中移除节点时,集群将会重新平均分布所有的数据。
    当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更,例如增加、 删除索引,或者增加、删除节点等。 而主节点并不需要涉及到文档级别的变更和搜索等操 作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。 任何节 点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。
    作为用户,我们可以将请求发送到集群中的任何节点 ,包括主节点。 每个节点都知道 任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论 我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将 最终结果返回給客户端。 Elasticsearch 对这一切的管理都是透明的。

    分布式集群

    单节点集群

    我们在包含一个空节点的集群内创建名为 users 的索引,例如分配 3 个主分片和一份副本(每个主分片拥有一个副本分片)
    PUT``http://localhost:9200/users
    1. {
    2. "settings" : {
    3. "number_of_shards" : 3,
    4. "number_of_replicas" : 1
    5. }
    6. }

    默认情况下,分片1,副本数1

我们现在拥有了一个索引的单节点集群。所有的三个主分片都在node-1上
可以通过elasticsearch-head插件查看使用情况。此时健康状况为yellow3/6 表示三个主分片正常运行,但是副本没有在正常状态Unassigned,他们都没有被分配到任何节点