自己写的一个elasticsearch的reindex工具

写在前面:从Elasticsearch v2.3.0开始, reindex api被引入。它能够对文档重建索引而不需要任何插件或外部工具。

 

传送门:https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docs-reindex.html

 

最近一直在研究es的分词插件,因为es的特殊机制,如果我需要给字段换分词方式的时候需要重新建一个索引然后重新索引数据,又因为公司现在还用的是1.4.5版本的elasticsearch,所以reindex的api是无法使用的,只能自己写一个reindex工具了。

 

程序的原理很简单,就是把是原es库中的数据取出来然后把数据再index到新的es库中。代码也很少,但是有一个字段校验的机制,是为了防止原来库里的数据和现在库不一样做的(如果是reindex的话其实应该不会不一样的,但是万一有错呢。。。)

 

踩过的坑:

 

1.Scroll()参数问题,这个方法里有两个参数,一个是time,一个是scrollid,我一直不知道那个time是干吗用的(因为在search()里定义request的时候scroll已经赋过一次time了),看资料他写的也不是很通俗易懂,后来在一个网站上查到了,因为之前我在request里写过一次所以以为那个持续时间是第一次就定义好的,其实不是的你每次执行scroll的时候都会重新给scrollid的scroll定义持续时间,所以那个时间是你每次调用scroll的时候就会刷新的。

 

2.如果原库里有字段是隐藏的或者读不到的一定要注意,这种字段在读的时候是读不到的,所以要在索引的时候重新赋值,这个很坑,一定要注意!避免花了好长时间导入到新库里才发现可能要的字段没有值(别问我为什么知道,都是血和泪的教训。。)

 

最后给大家发一下代码地址:https://github.com/123Jun321/EsReIndexTool---

 

posted @ 2018-04-13 17:30  学习虾  阅读(1579)  评论(0)    收藏  举报