版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
索引管理

创建索引

/* 创建一个索引 number_of_shards 默认值是5,最大值是1024 number_of_replicas默认值是1 索引的名字必须是小写,不能重名的 */ PUT twitter { "settings" : { "index" : { "number_of_shards" : 3, "number_of_replicas" : 2 } } }
返回参数
acknowledged:true 创建索引成功
shards_acknowledged:true 所需数量的分片+副本启动成功
这两个值也会返回false,如若没有返回错误信息,则代表等待时间过了超时时间,直接返回了
// 在创建的时候,加入映射 PUT test { "settings" : { "number_of_shards" : 1 }, "mappings" : { } } }// 加入别名定义 PUT test { "aliases" : { "alias_1" : {}, "alias_2" : { "filter" : { "term" : {"user" : "kimchy" } }, "routing" : "kimchy" } } }

其他命令

查看索引的定义信息

GET /stuff

删除

可以一次删除多个索引,以逗号间隔
删除所有的所有 _all 或者 *
DELETE /stuff

判断索引是否存在

HEAD stuff

修改备份数

PUT /stuff/_settings { "index" : { "number_of_replicas" : 2 } }

设置返回默认值

PUT /stuff/_settings { "index" : { "refresh_interval" : null } }

设置索引的读写

index.blocks.read_only: 设置true, 索引以及索引的元数据只可读
index.blocks.read_only_allow_delete: 设为true,只读时允许删除
index.blocks.read: 设置为true,则不可读
index.blocks.write: 设为true,则不可写
index.blocks.metadata: 设置为true, 则索引元数据不可读写

打开/关闭索引

关闭的索引不能进行读写操作,几乎不占用集群开销
关闭索引可以再次打开,走的是正常恢复流程
POST /stuff/_close
POST /stuff/_open

索引模板

创建索引时,定义索引可能是一件比较繁琐的事情,es提供索引模板功能,可以提前设置一个模板,在模板中定义好sttings,mapping,以及一个模板定义来匹配创建的索引
注意: 当使用模板创建索引后,后续修改模板不会影响已创建的索引.
新增/修改一个模板,匹配的字段为te* 或者bar*的索引创建
PUT _template/template_1 { "index_patterns": ["te*", "bar*"], "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "host_name": { "type": "keyword" }, "created_at": { "type": "date", "format": "EEE MMM dd HH:mm:ss Z YYYY" } } } } }

查看索引模板

GET /_template
GET /_template/temp*
GET /_template/template_1
GET /_template/template_1,template_2

删除模板

DELETE /_template/template_1

Shrink Index 收缩索引

索引的分片数是不可更改的, 如果需要减少分片数就需要通过收缩收益的方式进行收缩成一个新的索引
新的索引的分片数必须满足是原分片数的因子值
如原分片数是8, 则新的索引 分片数必须是4,2,1中的某一个.
收缩流程:
先把所有主分片转移到一台主机上在这个主机上创建一个新索引, 除分片数较小外,其他的设置原索引保存一致把原索引的所有分片数, 复制或硬链接到新索引的目录下对新索引进行打开操作恢复分片数据重新把新带索引分片均衡到其他节点(可做可不做,看情况)
收缩前的准备
将原索引设置为只读将原索引各分片的一个副本重分配到同一个节点上, 并且要是健康绿色状态PUT /stuff/_settings { "settings": { "index.routing.allocation.require._name": "shrink_node_name", "index.blocks.write": true } }
进行收缩:
POST stuff/_shrink/new_stuff { "settings": { "index.number_of_replicas": 1, "index.number_of_shards": 1, "index.codec": "best_compression" } }
查看新索引信息
收缩成功

Split Index 拆分索引

当索引的分片容量过大时, 可以通过拆分操作将索引拆分为一个倍数分片数的新索引.
index.number_of_routing_shards 路由分片数决定
此路由分片数决定了根据一致性hash路由文档到分片的散列空间
由创建索引时指定的
注意: 只有在创建时指定了index.number_ofrouting_shards的索引才可以进行拆分,但ES7以上就不再有次限制.
举例:
如果index.number_of_routing_shards = 30, 指定的分片数是5, 则可按如下进行拆分
5 -> 10 -> 30
5 -> 15 -> 30
5 -> 20
准备一个索引来进行拆分
// 7.0以下需要在创建时指定index.number_of_routing_shards路由分片数 PUT my_source_index { "settings": { "index.number_of_shards" : 1, "index.number_of_routing_shards" : 2 } }
设置索引只读
PUT /my_source_index/_settings { "settings": { "index.blocks.write": true } }
进行拆分
POST my_source_index/_split/my_target_index { "settings": { "index.number_of_shards": 2 } }
查看拆分后的索引
拆分成功~

Rollover Index 别名滚动指向新创建的索引

在处理有时效性的比如日志等索引数据, 过一定时间后,老的索引数据就没有用了
ES有类似数据库根据时间创建表来存储不同时段的数据
即可以通过别名滚动指向最新的索引的方式,让我们可以通过别名来操作,总数操作的最新的索引
注意: 这时的别名只能是一个索引的别名
示例:
// 创建一个别名为logs_write的索引 PUT /mylogs-000001 { "aliases": { "mylogs_write": {} } }/* 这段意思是说 如果别名log_write指向的索引是包含7天前创建的或索引的文档数 >= 1000 或索引的大小 >= 5gb, 就会创建一个新索引 mylogs-000002, 并把别名logs_writer指向新创建的logs-000002的索引 rollover是在请求它才会进行操作,并不是自动在后台进行的。可以周期性地去请求它 */ POST /mylogs_write/_rollover?dry_run { "conditions" : { "max_age": "7d", "max_docs": 1000, "max_size": "5gb" } }

Rollover Index 新增索引的命名规则

如果索引的名称是-数字结尾,如logs-000001,则新建索引的名称也会是这个模式,数值增1。
如果索引的名称不是-数值结尾,则在请求rollover api时需指定新索引的名称:
POST /my_alias/_rollover/my_new_index_name { "conditions": { "max_age": "7d", "max_docs": 1000, "max_size": "5gb" } }

判断是否能滚动是否能成功

/* dry_run */ POST /mylogs_write/_rollover?dry_run { "conditions" : { "max_age": "7d", "max_docs": 1000, "max_size": "5gb" } }
索引监控
查看索引状态信息
查看索引状态信息
GET /_stats
GET /mylogs-000001,my_source_index/_stats
查看索引段信息
查看索引段信息
GET /_segments
GET /test/_segments
GET /mylogs-000001,my_source_index/_segments
查看索引恢复信息
查看索引恢复信息
GET /_recovery?human
查看分片存储信息
查看索引分片的存储信息
GET /test/_shard_stores
状态管理
清理缓存
Clear Cache 清理缓存
POST /stuff/_cache/clear
默认会清除所有缓存,也可指定清理缓存
POST /_cache/clear
refresh
Refresh,重新打开读取索引
POST /_refresh
POST /stuff/_refresh
flush
Flush,将缓存在内存中的索引数据刷新到持久存储中
POST stuff/_flush
Force meger
Force merge 强制段合并
POST /stuff/_forcemerge?only_expunge_deletes=false&max_num_segments=100&flush=true
可选参数
flush: 合并后是否刷新,默认true
max_num_segments: 合并为几个段,默认是1
only_expunge_deletes: 是否只合并含有删除文档的段,默认false