Elasticsearch 快速浏览
📅 2015-11-03 | 🖱️
1.基本概念-文档和索引 #
1.1 文档(document) #
Elasticsearch是面向文档的,文档被序列胡化JSON格式保存在Elasticsearch中。 文档是指存储在索引里的JOSN格式的文档。每个文档由字段组成。 例如:
1{
2 "_index": "book-store",
3 "_type": "book",
4 "_id": "1",
5 "_version": 1,
6 "_score": 1,
7 "_source": {
8 "id": 1,
9 "name": "ElasticSearch Book"
10 }
11}
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=false
和node.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示例 #
查看集群状态:
1GET _cluster/health
2GET _cat/nodes
3GET _cat/shards
查看索引的基本信息(如setting,mapping等):
1GET /twitter
查看索引的文档总数和分片信息:
1GET twitter/_count
查看前10条文档:
1POST /twitter/_search
2{
3}
文档的增删改查,详细参考Document APIs.