Elasticsearch中的基本概念

集群(cluster)
  • 表明一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是能够经过选举产生的,主从节点是对于集群内部来讲的。es 的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来讲的,由于从外部来看 es 集群,在逻辑上是个总体,你与任何一个节点的通讯和与整个 es 集群通讯是等价的。
索引(index)
  • ElasticSearch 将它的数据存储在一个或多个索引(index)中。用 SQL 领域的术语来类比,索引就像数据库,能够向索引写入文档或者从索引中读取文档,并经过ElasticSearch 内部使用 Lucene 将数据写入索引或从索引中检索数据。
文档(document)
  • 文档(document)是 ElasticSearch 中的主要实体。对全部使用 ElasticSearch的案例来讲,他们最终均可以归结为对文档的搜索。文档由字段构成。
映射(mapping)
  • 全部文档写进索引以前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫作映射(mapping)。通常由用户本身定义规则。
类型(type)
  • 每一个文档都有与之对应的类型(type)定义。这容许用户在一个索引中存储多种文档类型,并为不一样文档提供类型提供不一样的映射。
分片(shards)
  • 表明索引分片,es 能够把一个完整的索引分红多个分片,这样的好处是能够把一个大的索引拆分红多个,分布到不一样的节点上。构成分布式搜索。分片的数量只能在索引建立前指定,而且索引建立后不能更改。5.X 默认不能经过配置文件定义分片
副本(replicas)
  • 表明索引副本,es 能够设置多个索引的副本,副本的做用一是提升系统的容错性,当个某个节点某个分片损坏或丢失时能够从副本中恢复。二是提升 es 的查询效率,es 会自动对搜索请求进行负载均衡。
数据恢复(recovery)
  • 表明数据恢复或叫数据从新分布,es 在有节点加入或退出时会根据机器的负载对索引分片进行从新分配,挂掉的节点从新启动时也会进行数据恢复。
  • GET /_cat/health?v #能够看到集群状态
数据源(River)
  • 表明 es 的一个数据源,也是其它存储方式(如:数据库)同步数据到 es 的一个方法。它是以插件方式存在的一个 es 服务,经过读取 river 中的数据并把它索引到 es中,官方的 river 有 couchDB 的,RabbitMQ 的,Twitter 的,Wikipedia 的,river这个功能将会在后面的文件中重点说到。
网关(gateway)
  • 表明 es 索引的持久化存储方式,es 默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个 es 集群关闭再从新启动时就会从 gateway 中读取索引数据。es 支持多种类型的 gateway,有本地文件系统(默认),分布式文件系统,Hadoop的 HDFS 和 amazon 的 s3 云存储服务。
自动发现(discovery.zen)
  • 表明 es 的自动发现节点机制,es 是一个基于 p2p 的系统,它先经过广播寻找存在的节点,再经过多播协议来进行节点之间的通讯,同时也支持点对点的交互。
  • 5.X 关闭广播,须要自定义
通讯(Transport)
  • 表明 es 内部节点或集群与客户端的交互方式,默认内部是使用 tcp 协议进行交互,同时它支持 http 协议(json 格式)、thrift、servlet、memcached、zeroMQ 等的传输协议(经过插件方式集成)。
  • 节点间通讯端口默认:9300-9400
分片和复制(shards and replicas)

  一个索引能够存储超出单个结点硬件限制的大量数据。好比,一个具备 10 亿文档的索引占据 1TB 的磁盘空间,而任一节点可能没有这样大的磁盘空间来存储或者单个节点处理搜索请求,响应会太慢。node

  为了解决这个问题,Elasticsearch 提供了将索引划分红多片的能力,这些片叫作分片。当你建立一个索引的时候,你能够指定你想要的分片的数量。每一个分片自己也是一个功能完善而且独立的“索引”,这个“索引” 能够被放置到集群中的任何节点上。数据库

  分片之因此重要,主要有两方面的缘由:json

  • 容许你水平分割/扩展你的内容容量
  • 容许你在分片(位于多个节点上)之上进行分布式的、并行的操做,进而提升性能/吞吐量

  至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是彻底由 Elasticsearch 管理的,对于做为用户的你来讲,这些都是透明的。网络

  在一个网络/云的环境里,失败随时均可能发生。在某个分片/节点由于某些缘由处于离线状态或者消失的状况下,故障转移机制是很是有用且强烈推荐的。为此, Elasticsearch 容许你建立分片的一份或多份拷贝,这些拷贝叫作复制分片,或者直接叫复制。app

  复制之因此重要,有两个主要缘由:
  • 在分片/节点失败的状况下,复制提供了高可用性。复制分片不与原/主要分片置于同一节点上是很是重要的。由于搜索能够在全部的复制上并行运行,复制能够扩展你
的搜索量/吞吐量
  • 总之,每一个索引能够被分红多个分片。一个索引也能够被复制 0 次(即没有复制)或屡次。一旦复制了,每一个索引就有了主分片(做为复制源的分片)和复制分片(主分片的拷贝)。
  • 分片和复制的数量能够在索引建立的时候指定。在索引建立以后,你能够在任什么时候候动态地改变复制的数量,可是你不能再改变分片的数量。
  • 5.X 默认 5:1 5 个主分片,1 个复制分片
默认状况下,Elasticsearch 中的每一个索引分配 5 个主分片和 1 个复制。这意味着,若是你的集群中至少有两个节点,你的索引将会有 5 个主分片和另外 5 个复制分片(1 个彻底拷贝),这样每一个索引总共就有 10 个分片。

对应关系:
索引 ------------数据库
类型 ------------表
文档------------数据
映射------------对索引类型的配置