Elasticsearch 数值类型也能存String 类型,有点意思~

一、前言|

最近经常遇到遇到某个客户问数值类型的字段也能存字符串,或者说已经将字段类型设置成了float,但是实际存储的仍然是字符串,该如何解决,今天花点时间我们来梳理整个流程。

二、实际演练

1,定义一个索引mapping,并指定类型为float.单精度浮点型

PUT nginxindex
{
  "mappings": {
    "properties": {
      "price":{
        "type": "float"
      }
    }
  }
}

2,写入几个文档,看看效果

POST nginxindex/_doc
{
  "price":4.68        //数字类型
}

POST nginxindex/_doc
{
  "price": "4.69"      //字符串类型
}

POST nginxindex/_doc
{
  "price": "free for charge"    //字符串类型
}

3,对比结果

第一个,正常写入,有返回,

第二个,正常写入,有返回,

第三个,无法写入,报错提示。提示如下图所示

1,先创建一个目标索引,指定mapping参数

PUT nginxnewindex2
{
  "mappings": {
    "properties": {
      "price":{
        "type": "float",
        "coerce": false
      }
    }
  }
}

2, 执行reindex拷贝,这里有问题,注意

POST _reindex
{
  "source": {
    "index": "nginxindex"
  },
  "dest": {
    "index": "nginxnewindex2"
  }
}

返回报错如下:

那么至此,彻底解决客户这个问题。问题整理完毕。以后两个字段类型不一样需要转格式,大家也可以这么操作。

七、总结

本文从一个实际生产案列出发,分析剖解解决了一个字段精确值的问题,以及平滑解决存量索引字段类型转换的问题,因该方法比较经典,特梳理整理了一下,希望能帮到有需求的人们。

完。

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
Elasticsearch 数值类型也能存String 类型,有点意思~
最近经常遇到遇到某个客户问数值类型的字段也能存字符串,或者说已经将字段类型设置成了float,但是实际存储的仍然是字符串,该如何解决,今天花点时间我们来梳理整个...
<<上一篇
下一篇>>