在实际业务场景中,数据不总是干净的。一个数字可能会在 JSON body
中呈现为一个真正的 JSON 数字,例如5;但它也可能呈现为字符串, 例如 “5” ;或者应该是整型的数字被替代地呈现为浮点型——例如5.0 或者 “5.0”
Type Coercion
尝试着清理脏数据,让字段符合相应的数据类型。例如 :
往coercion_test
索引中插入一条数据,设置price为浮点数类型:
PUT /coercion_test/_doc/1
{
"price": 7.4
}
此时,Elasticsearch会做Dynamic Mapping
, 将price类型设置为float
:
我们尝试插入一条数据将,将price设置成"7.4"
, 发现能够成功插入:
获取这条数据,发现Elasticsearch将字符串类型转换成浮点数类型:
但当我们插入一条不符合浮点数规范的数据,Elasticsearch会报错:
上面示例整个过程的工作机制如下:
Type Coercion
很方便,但建议在业务中使用一致的数据类型。
默认Elasticsearch开启Coercion,也可以将其关闭