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"
}
}
返回报错如下:
那么至此,彻底解决客户这个问题。问题整理完毕。以后两个字段类型不一样需要转格式,大家也可以这么操作。
七、总结
本文从一个实际生产案列出发,分析剖解解决了一个字段精确值的问题,以及平滑解决存量索引字段类型转换的问题,因该方法比较经典,特梳理整理了一下,希望能帮到有需求的人们。
完。