Elasticsearch教程(22) 详解mapping之数值类型

1 简介

  • ES支持如下数字类型
类型说明
byte8位,-128 ~ 127
short16位,-32768 ~ 32767
integer32位,-231 ~ 231-1
long64位,-263 ~ 263-1
float单精度、32位、符合IEEE 754标准的浮点数
double双精度、64位、符合IEEE 754标准的浮点数
half_float16位半精度IEEE 754浮点类型
scaled_float缩放类型的的浮点数
为了提高性能和减少存储空间,选择一个满足存放你数据的类型就可以,没有必要选择过长的类型。比如各地人口数量,一般用integer存储足够了,没有必要使用long类型。

2 实验

2.1 创建一个新的索引

PUT pigg_test_num
{
  "mappings": {
    "properties": {
      "num_of_byte": {
        "type": "byte"
      },
      "num_of_short": {
        "type": "short"
      },
      "num_of_integer": {
        "type": "integer"
      },
      "num_of_long": {
        "type": "long"
      },
      "num_of_float": {
        "type": "float"
      },
      "num_of_double": {
        "type": "double"
      }
    }
  }
}

2.2 插入正确的数据

PUT pigg_test_num/_doc/1
{
  "num_of_byte": 127,
  "num_of_short": 32767,
  "num_of_integer": 2147483647,
  "num_of_long": 9223372036854775807,
  "num_of_float": 0.33333,
  "num_of_double": 11111111111111.11111111111111111
}

查看文档的数据

GET pigg_test_num/_search

返回:
{
    "hits":[
        {
            "_index":"pigg_test_num",
            "_type":"_doc",
            "_id":"1",
            "_score":1,
            "_source":{
                "num_of_byte":127,
                "num_of_short":32767,
                "num_of_integer":2147483647,
                "num_of_long":9223372036854776000,
                "num_of_float":0.33333,
                "num_of_double":11111111111111.111
            }
        }
    ]
}

2.3 插入越界的数据

short的最大值是32767

PUT pigg_test_num/_doc/2
{
  "num_of_byte": 127,
  "num_of_short": 32768
}

返回报错
"reason" : "Numeric value (32768) out of range of Java short..."

2.4 给整数赋值浮点数

给long类型赋值浮点数, 虽然能够存储成功,但是已经丢失了精度,所以工作中不能这么用

PUT pigg_test_num/_doc/1
{
  "num_of_long": 9223372036854775807.0001
}
返回
 "_source" : {
    "num_of_long" : 9.223372036854776E18
}

2.5 给整数赋值浮点数的字符串

给long类型赋值浮点数的字符串, 虽然能够存储成功, 但是存的就是字符串,而不是数字.

PUT pigg_test_num/_doc/1
{
  "num_of_long": "9223372036854775807.0001"
}
返回
"_source" : {
    "num_of_long" : "9223372036854775807.0001"
}

下面验证存的是字符串而不是数字

#期望给long的值加上2
POST pigg_test_num/_update/1
{
  "script": {
    "source": "ctx._source.num_of_long += 2",
    "lang": "painless"
  }
}
# 返回值却是给字符串拼接加上字符"2"
"_source" : {
    "num_of_long" : "9223372036854775807.00012"
}

总结: 综合上面错误的实验, 可以知道工作中还是得传正确格式和范围的数字.
如果本文对您有帮助,就点个赞👍吧

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为啥总是用户昵称已存在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值