在上一篇博客中,介绍了ES中的一些核心概念和ES、Kibana安装方法。本节开始,我们从索引开始来学习ES的操作方法。
1 创建索引¶
创建一个索引的方法很简单,在Kibana中运行下行请求即可创建一个名为“index1”的索引:
PUT /index1
运行结果如下所示,左侧为我们输入的请求语句,递减三角形按钮运行后,出现右侧返回结果。
注意,如果“index1”索引名已经存在,则会报错。acknowledged
和shards_acknowledged
的值仅表示在超时前索引是否创建成功及是否为每个分片创建好指定数量的副本,就算它们的值为false也不代表索引创建失败,应该索引在超时后也可能创建完成。
另外,索引名必须符合以下规则:
-
索引名称中的字母必须是小写字母
-
不能包含
\, /, *, ?, ", <, >, |, 空格, , , ,#, !
中的任何一个 -
不能以
-, _, +
开头 -
不能是
.
或者..
-
不能长于255bytes
在创建索引时,可以再请求体内对别名(aliases)、映射(mappings)、settings(设置项)进行配置。
- 别名
ES中可以为索引添加别名,一个别名可以指向到多个索引中,同时在添加别名时可以设置筛选条件,指向一个索引的部分数据,实现在关系数据库汇总的视图功能,这就是ES中别名的强大之处。别名可以再创建索引时添加,也可以在索引创建后进行添加,ES中提供丰富的API对别名进行管理。在本篇博客,我们以索引为主,只是简单说说在创建索引时如何添加别名。更多别名内容请参考官方文档
如下所示,在创建index3索引时,我们同时为其创建alias_1和alias_2别名,其中alias_2指定筛选条件,最后通过routing参数指定分片路由。
PUT /index3 { "aliases": { "alias_1": {}, "alias_2": { "filter": { "term": { "user.id": "张三" } }, "routing": "shard-1" } } }
- 映射
在创建索引时,我们可以在通过映射,对索引中字段、字段类型等等内容进行配置。例如:
PUT /index4 { "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "field1": { "type": "text" } } } }
- 配置项
一些索引的相关配置项也可以在创建索引时指定。例如,对主分片和副本分片数量进行设置:
PUT /index2 { "settings": { "index": { "number_of_shards": 3, "number_of_replicas": 2 } } }
还可以写得更加简单一点:
PUT /my-index-000001 { "settings": { "number_of_shards": 3, "number_of_replicas": 2 } }
2 基本操作¶
2.1 查看索引信息¶
- 查看指定索引信息。通过GET请求,直接指定索引名,可以查看索引信息,包括索引别名、映射、设置项等信息。
更进一步的,可以同时指定多个索引名,查看多个索引信息。
GET /index1,index2
或者通过_all
参数指定查看所有索引信息。
GET /_all
- 查看索引是否存在。 通过HEAD请求,指定索引名,可以查看索引是否存在,如果存在,返回状态码200,如果不存在,返回404。
索引存在时:
索引不存在时:
-
查看所有索引列表。 通过下面接口,可以查询集群中所有索引,列出索引的健康情况、当前状态、id占用空间等信息。
GET /_cat/indices?v
2.2 删除索引¶
- 关闭、开启索引
ES中索引支持关闭和打开操作,一个关闭的索引除了维护元数据的基本消耗外,几乎没有任何其他开销,在关闭状态下的索引禁止进行IO操作,再次打开后可恢复正常状态。
关闭索引:
POST /index1/_close
打开索引:
POST /index1/_open
- 删除索引 通过下方接口可以删除一个索引,如果删除成功,将返回acknowledge:true
DELETE /index3?pretty