今天我们要讨论的主题会让很多新手感到困惑,因为本身这个问题就挺难理解的。但如果你对 ES 比较熟悉,今天的内容也可以测试一下你对 ES 数据类型方面的知识是否牢靠。
一、默认的 Numeric 类型
首先,我们创建一个索引:
PUT orders/_doc/1
{
"order_id": 1
}
如上示例,利用 Dynamic Mapping,系统会为自动为 orders 索引创建一个 Mapping,那么默认的情况下,order_id 这个字段会被推断为啥类型呢?
下面是这个 orders 索引的 Mapping:
# 获取 Mapping
GET orders/_mapping
# 结果:
{
"orders" : {
"mappings" : {
"properties" : {
"order_id" : { "type" : "long" }
}
}
}
}
如上示例,很明显 Dynamic Mapping 推断的 order_id 为 long 类型。
那如果我们对这个 order_id 字段写入一些非整型数字会发生啥情况呢?在 Kibana 中执行以下命令来插入文档:
PUT orders/_doc/2
{
"order_id": 2
}
PUT orders/_doc/3
{
"order_id": "3"
}
PUT orders/_doc/4
{
"order_id": 4.5
}
PUT orders/_doc