当索引建好后,需要修改分片的时候,ES是不支持直接修改的,只能建一个新的索引,然后把原索引的数据reindex到新索引里面去,以达到修改的目的。
reindex实际上是用scroll对数据进行游标查询然后插入到新索引,操作如下:
参数解释如下:
①slices:切片,表示查询的并行数,一般设置为auto,表示和索引的分片数相等
②size:一次scroll查询的数量,默认是1000,可以适当调大,根据cpu和内存使用情况调整到最优设置
③wait_for_completion:是否等待完成,一般如果删除数据的时间大于30秒(socket超时时间)的时候,kibana会显示超时,并且不会返回结果。这里设置为false,表示直接返回,不等待执行结果,这里会返回一个taskId,可以查看任务的执行情况和结果
④query:这个是可选项,表示从原索引查到的数据才会被导出,默认不加的话,是导出全部数据
上面会执行的语句会返回taskId,可以查看任务的执行情况和结果,直到任务完成
GET _tasks/dCNYPIg4RHm3ymBqyEjMwA:593861931)创建一个备份索引(修改后的索引结构),把原索引的数据reindex过去
2)删除原索引
3)创建一个和原索引名字一样的索引,但是索引结构是修改后的
4)把备份索引的数据reindex到新索引中
这个操作的缺点是会中断服务,所以需要在没有人使用该索引的情况下使用,如果需要无感知修改,则需要使用别名,这里不做详细说明
注意:
该操作会导致cpu、内存飙升和服务中断,请尽量避免使用高峰期操作