强制类型转换 - Type Coercion

在实际业务场景中,数据不总是干净的。一个数字可能会在 JSON body中呈现为一个真正的 JSON 数字,例如5;但它也可能呈现为字符串, 例如 “5” ;或者应该是整型的数字被替代地呈现为浮点型——例如5.0 或者 “5.0”

Type Coercion 尝试着清理脏数据,让字段符合相应的数据类型。例如 :

  • 字符串被强制转换为数字—— “5” 转换为整型数值5
  • 浮点型被截断为整型—— 5.0 转换为整型值5

Type Coercion示例

coercion_test索引中插入一条数据,设置price为浮点数类型:

PUT /coercion_test/_doc/1
{
  "price": 7.4
}

image-20220716212436014

此时,Elasticsearch会做Dynamic Mapping, 将price类型设置为float

image-20220716212506192

我们尝试插入一条数据将,将price设置成"7.4", 发现能够成功插入:

image-20220716212539186

获取这条数据,发现Elasticsearch将字符串类型转换成浮点数类型:

image-20220716212712223

但当我们插入一条不符合浮点数规范的数据,Elasticsearch会报错:

image-20220716212623379


上面示例整个过程的工作机制如下:

image-20220709194757790

Type Coercion很方便,但建议在业务中使用一致的数据类型。
默认Elasticsearch开启Coercion,也可以将其关闭