Elasticsearch教程(22) 详解mapping之数值类型
elasticsearch教程 详解 类型 22 数值 Mapping
2023-09-27 14:26:50 时间
Elasticsearch详解mapping之numeric
1 简介
- ES支持如下数字类型
类型 | 说明 |
---|---|
byte | 8位,-128 ~ 127 |
short | 16位,-32768 ~ 32767 |
integer | 32位,-231 ~ 231-1 |
long | 64位,-263 ~ 263-1 |
float | 单精度、32位、符合IEEE 754标准的浮点数 |
double | 双精度、64位、符合IEEE 754标准的浮点数 |
half_float | 16位半精度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"
}
总结: 综合上面错误的实验, 可以知道工作中还是得传正确格式和范围的数字.
如果本文对您有帮助,就点个赞👍吧
相关文章
- Elasticsearch操作索引
- 30 个 ElasticSearch 调优知识点,都给你整理好了!
- Elasticsearch使用备忘
- 【ElasticSearch】索引别名
- elasticsearch命令
- 【Elasticsearch教程19】IK分词器 ik_max_word、ik_smart
- 【Elasticsearch教程9】Mapping keyword的ignore_above
- Elasticsearch教程(30) pipeline处理 painless script脚本详细总结 查询更新案例
- Elasticsearch教程(29) update by query的Script脚步更新 Java API 支持es5.6 es6.8 es7.8
- Elasticsearch教程(28) text和keyword区别 term和match区别 ik中文分词器使用
- Elasticsearch教程(13) Elasticsearch工具类 支持树形结构
- Elasticsearch教程(11) elasticsearch 桶聚合 Query DSL
- Elasticsearch教程(3) ES聚合查询DSL
- Elasticsearch教程(2) ES查询语句Query DSL详细教程
- Elasticsearch教程(1) Query DSL入门
- Elasticsearch连续剧之实战搜索文档
- 讲得最明白的Elasticsearch源码调试环境搭建教程
- Elasticsearch 基本查询
- ElasticSearch 学习01——安装Elasticsearch、Kibana和X-Pack