1.基本概念-文档和索引

1.1 文档(document)

Elasticsearch是面试文档的,文档被序列胡成JSON格式保存在Elasticsearch中。 文档是指存储在索引里的JOSN格式的文档。每个文档由字段组成。 例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
  "_index": "book-store",
  "_type": "book",
  "_id": "1",
  "_version": 1,
  "_score": 1,
  "_source": {
      "id": 1,
      "name": "ElasticSearch Book"
  }
}

1.2 字段(field)

字段是组成文档的基本元素。例如上面例子中的"name": "ElasticSearch Book"这个键值对就是一个最基本的字段。 每个文档都有一些元数据字段,用于标注文档的相关信息,如:

  • _index 文档所属的索引名
  • _type 文档所属的类型名
  • _id 文档唯一Id
  • _source 文档的原始Json数据
  • _version 文档的版本信息。版本在并发读写时可以用于解决冲突。
  • _score 相关性打分

1.3 索引(index)

索引是一类文档的集合,索引是逻辑空间的概念,每个索引都有自己的mapping(映射)定义,用于定义包含的文档的字段名和字段类型。 每个索引可以包含多个类型(type)。

1.4 类型(type)

类型是索引中的逻辑分区。表示一类相似的文档类型。一个索引可以有多个类型

2017年12月更新:ElasticSearch 6.x中创建的索引将只可以有一个映射类型。Elasticsearch Reference [6.x] » Mapping » Removal of mapping types。目前类型已经被Deprecated。

1.5 映射(mapping)

映射用来mapping文档的字段和字段对应的数据类型。 字段的数据类型Field datatypes

1.6 setting

索引的setting用于定义不同的数据分布。

2.基本概念 - 节点、分片、集群

2.1 节点(node)

节点是指单一运行的ES实例,这个实例将属于某个ES集群。 每个节点都有一个名字,通过elasticsearch.yml中的node.name指定,每个节点启动后会生成一个uid,保存在ES的data目录下,有的时候某个节点因迁移数据出现无法加入集群的问题,可以尝试通过重新生成这个uid来解决。

在ES中节点可以具有如下三种角色:

  • 数据节点(data node): 用于索引文档并对这些文档进行保存,负责保存分片数据,通过增加更多数据节点扩展ES集群以提高性能。数据节点通过在配置文件elasticsearch.yml中以node.data=true指定。
  • 主节点(master node):负责管理集群。对于规模很大的ES集群建议有多个专用的主节点(一主多备),专用的主节点将不同时作为数据节点。主节点通过在配置文件elasticsearch.yml中以node.master=true指定。
  • 负载均衡节点(coordinating node):这种节点既不作为数据节点,也不作为主节点,而是用于负载均衡和路由搜索请求或将文档索引到合适的节点,即负责接收客户端的请求,并将请求分发到合适的节点,最终会把结果汇集到一起。负载均衡节点通过在配置文件中以node.data=falsenode.master=false指定。

每个节点启动后默认成为一个Master eligible节点(可设置node.master: false禁止成为Master eligible节点)。Master eligible节点参与选主流程,可以成为Master节点。 集群中第一个节点启动时,会将自己选举成master节点。每个节点上都会保存集群的状态,但只有master节点可以修改集群的状态信息。

2.2 分片(shards)

索引数据实际以分片的形式存储。每个索引可以有多个主分片和副本分片。分片分布在集群中的所有节点中。 分片可以在集群节点间移动,例如新节点加入或已有节点失效时。一个分片是一个运行的Lucene的实例。

分片的数量在索引创建时需要预先设定好,索引创建好了之后就不能调整了,只能通过重建索引的方式进行调整。副本数可以在索引创建后进行调整。

在ES 7之前,每个索引默认的主分片数量是5,在创建索引时可以设置,从ES 7.0开始默认的主分片数量调整为1.

2.3 集群(cluster)

集群是ES节点的集合。

集群由三种健康状态:

  • 绿: 表示所有主分片和副本分片分配都OK,集群正常运行
  • 黄: 表示主分片已经OK,但有部分副本分片还没准备好
  • 红:表示有主分片还没有准备好

2.ElasticSearch的RESTful API

2.2 RESTful API示例

查看集群状态:

1
2
3
GET _cluster/health
GET _cat/nodes
GET _cat/shards

查看索引的基本信息(如setting,mapping等):

1
GET /twitter

查看索引的文档总数和分片信息:

1
GET twitter/_count

查看前10条文档:

1
2
3
POST /twitter/_search
{
}

文档的增删改查,详细参考Document APIs.