Elasticsearch Reindex数据(将字符串转换为数字类型)

场景:在创建的时候使用string,进入es后是keyword类型,在使用kibana的时候不能使用它做视图
在网上找了很多,不能更改字段类型,有些很麻烦,看这个比较简单
其实就是创建一个新的index,再把老index导入进去

话不多说上干货

老的index是qzwl_dcs
数据json是

{
  "_index": "qzwl_dcs",
  "_type": "qzwl_dcs",
  "_id": "000739974655122-1420191908",
  "_version": 1,
  "_score": 1,
  "_source": {
    "date": "2019-04-29T03:32:17.000+0800",
    "area": "2",
    "kks": "10MKF88CP101",
    "station": "2",
    "name": "1#机转子线圈进水压力1",
    "moduleName": "转子线圈进水口",
    "moduleId": "72",
    "value": "203.55"
  },
  "fields": {
    "date": [
      "2019-04-28T19:32:17.000Z"
    ]
  }
}

value字段现在是keyword类型,想把他变成double类型

先创建一个新的index,type名称和qzwl_dcs一样

curl -H 'Content-Type: application/json' -XPUT "http://192.168.31.203:9200/dcs_new"
curl  -H 'Content-Type: application/json' -XPOST "http://192.168.31.203:9200/dcs_new/qzwl_dcs/_mapping?pretty" -d ' 
{
    "qzwl_dcs": {
            "properties": {
                "value": {
                    "type": "double",
                    "store": "true",
                    "ignore_malformed": "true"
                }
            }
        }
  }

"ignore_malformed"是设置允许插入其他类型 即忽略类型异常
因为我的value中有null字符串,一开始没加,报错
加上"ignore_malformed"以后,导入的数值是null时,value一般是空

下面开始导数据


curl  -X POST "localhost:9200/_reindex" -H 'Content-Type: application/json' -d'
{
  "source": {
    "index": "qzwl_dcs"
    "size": 5000
  },
  "dest": {
    "index": "dcs_new"
    "routing": "=cat"
  }
}'

注意 : size代表每次导入数据量,可以适当更改,这个的优化也是要有的,否则会很慢
优化可以看下边连接

链接

你可能感兴趣的:(es)