es索引重建与迁移

在es中对于某个创建好的索引,尤其是里面的field的类型在初次设置完毕并添加了数据之后,再想重新修改字段类型是比较麻烦的一件事,而且现实问题是,es的某个索引存储的数据量非常大,非特殊情况下是没有必要更换索引的,但在一些特定的场景下,比如误操作导致索引类型创建有误,text类型的被创建成long了,或者是为了完成索引到数据的迁移但又不能影响线上的应用,就需要对index进行迁移;

在es中,迁移的思路大致如下,
1、为原来的索引【这里假如叫做 old_index】 加一个别名,比如叫alias_index;
2、手动创建一个新的索引 new_index;
3、使用es的scroll的API将旧索引中的数据循环的查出来;
4、采用bulk api将scoll查出来的一批数据,批量写入新索引;
5、使用POST发送请求,移除别名的alias_index,然后将数据指向新的索引

下面我们实际模拟一下这个场景,假如我们一开始创建了一个索引,并加了两条数据,

es索引重建与迁移_第1张图片
es索引重建与迁移_第2张图片

我们的目的是往my_index这个索引加一个字段类型为text的,但第一次写入这种格式后es会以date类型写进去,这时候假如想以text类型写入就会报错,
es索引重建与迁移_第3张图片
但是又不能修改字段的分词类型了,可以看到修改会报错,
es索引重建与迁移_第4张图片

要怎么解决这个问题呢?尤其是里面存储了较多的数据的时候,这是个麻烦事,按照前面所说,我们可以进行索引的重建迁移,将旧的索引导向一个别名索引,

PUT /my_index/_alias/goods_index

es索引重建与迁移_第5张图片

别名导向成功后,下面我们新建一个正确的字段类型索引,
es索引重建与迁移_第6张图片

创建完毕后,首先使用scroll的API将原索引数据滚动的查出来,
es索引重建与迁移_第7张图片

es索引重建与迁移_第8张图片

反复执行上面的步骤,直到通过这种方式将数据全部全部执行成功为止,在应用中我们可以通过线程池的方式分批执行此操作,执行完毕上诉的操作后,开始进行由别名索引到新索引的数据指向关系的反转,
es索引重建与迁移_第9张图片

执行完毕之后,我们看一下新索引的数据,可以看到,数据完成了从my_index到my_index_new的无缝转移,并不需要我们对服务器进行关机等操作,对用户来说是无感的
es索引重建与迁移_第10张图片

本篇的说明到此基本结束,最后感谢观看!

你可能感兴趣的:(ElasticSearch)