修改elasticsearch字段数据类型

以下操作基于elasticsearch版本:5.4 (elasticsearch最新版本7.x不适合)

说明:所有操作都在elasticsearch插件中进行。如果你没有插件,理会其精神,也是可以使用命令行操作的。

修改elasticsearch字段数据类型_第1张图片

首先需明确一点:

elasticsearch中字段的数据类型无法做更新处理,这不像mysql中字段数据类型可以更新。

 

因此修改字段数据类型的思路是:

1、先新建一份新的索引A,新的索引A中,将需要修改的字段数据类型改为你需要更正的类型,其余字段与旧的索引B保持一致。

2、将旧索引B中数据复制到新索引A的数据中;

3、删除旧索引B数据;

4、再创建一个新索引C,C的要求是索引名称与B一致,字段数据类型与A一致;

5、将新索引A的数据复制到新索引C中;

6、删除新索引A数据。

7、此时得到的新索引C就是我们需要的。


1、首先查看字段的数据类型,是否真的错误。

在浏览器中输入地址,查看索引下字段的数据类型。
http://192.168.0.17:9201/article/_mapping

说明:
1、http://192.168.0.17:9201 数据查询ip
2、article 需要查询的索引名
3、_mapping 查询字段数据类型的命令

查询结果如下:
{
  "article": {     ------------------- index名称
    "mappings": {
      "info": {     ------------------ type名称
        "properties": {
          "createTime": {  ----------- 字段名称
            "type": "date"   --------- 数据类型
          },
          "data": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "id": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "type": {
            "type": "long"
          },
          "uid": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

2、新建新索引A,修改自己需要的字段数据类型。此处为了演示,将type类型修改为tex

修改elasticsearch字段数据类型_第2张图片

完整json:

{
  "article": {
    "mappings": {
      "info": {
        "properties": {
          "createTime": {
            "type": "date"
          },
          "data": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "id": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "type": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "uid": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

3、旧索引数据复制到新索引。

完整json:

{
  "source": {
    "index": "article"
  },
  "dest": {
    "index": "article_temp"
  }
}

4、删除旧索引数据

修改elasticsearch字段数据类型_第3张图片

 

 

5、创建另一个新索引,该索引名称与旧索引相同,字段数据类型与上面新建索引相同。此处与第二步相同。

 

6、复制数据到新索引。此处与第三步相同。

 

7、删除第一个新建的索引。此处与第第四步相同。

 

8、至此就得到了你需要的。


我们可以看到在这个过程中,数据复制了两次,如果你的elasticsearch数据量比较大,则这个过程将会比较久。

 

还有一个别的处理方法,就是在第四步后,我们给新建的索引创建一个别名,别名和旧索引一致。

{
    "actions": [
        {"add": {"index": "article_temp", "alias": "article"}}
      ]
}

 

 

 

 

你可能感兴趣的:(es,bug解决)