Bootstrap

ElasticSearch复制index数据,如何修改索引字段

一、需求

当es字段类型无法支撑业务需求,需要修改到字段类型的时候。例如修改字段类型从Integer变成double,这种情况下,是没办法修改es的字段的type的。

原因是一个字段的类型进行修改之后,ES会重新建立对这个字段的索引信息,ElasticsSearch的底层是Lucene库,字段类型修改会涉及到分词方式,相关度,TF/IDF等倒排的生成 , 所以是没办法修改的了。

这种情况下,如何能兼容旧数据的同时,实现修改字段类型?

二、如何实现:es的reindex

实现原理:通过es的reindex功能把旧索引的数据reindex到新索引,然后为新索引建立旧索引的别名,最后删除旧索引。

下面以重构:idt-shelf-2265-index-202003 下的 shelf_sub_job 中的Integer字段变为double为例子

  1. 新建一个索引:idt-shelf-2265-index-202003-temp (注:该索引下的数据表type和原索引保持一致。其中,新索引中的字段属性已修改为double)
    *可通过EsIndexService类创建一个新的索引。
     
  2. 执行reindex操作,把旧索引的数据复制到新索引:
    POST _reindex                    
    {
      "source": {
        "index": "idt-shelf-2265-index-202003"
      },
      "dest": {
        "index": "idt-shelf-2265-inde
;