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
分享
二维码
海报
<<上一篇
下一篇>>