前言
- 本文在 Elasticsearch 7.17 下测试
- Elasticsearch 自 7.10 引入了 64 位无符号整数
unsigned_long
,之前只有long
- 已知
long
的数据范围
[-2^63, 2^63-1]
即
[-9223372036854775808, 9223372036854775807]
- 已知
unsigned_long
的数据范围
[0, 2^64-1]
即
[0, 18446744073709551615]
试验
- 创建索引
PUT my_index
{
"mappings": {
"dynamic": true,
"properties": {
"LLL": {
"type": "long"
},
"UUU": {
"type": "unsigned_long"
}
}
}
}
- 测试
LLL
字段,写入数据18446744073709551615
,即2^64-1
POST /my_index/_doc/1
{
"LLL": 18446744073709551615,
"UUU": 18446744073709551615
}
LLL
字段报错如下,超过了 long
能表达的数据范围
Numeric value (18446744073709551615) out of range of
long (-9223372036854775808 - 9223372036854775807)
- 测试
DDD
动态字段,写入数据18446744073709551615
,即2^64-1
POST /my_index/_doc/1
{
"UUU": 18446744073709551615,
"DDD": 18446744073709551615
}
DDD
字段跟前面 LLL
报一样的错误。
- 测试写入短整数动态字段,
III
字段被解析位long
类型
POST /my_index/_doc/1
{
"III": 1844
}
小结
long
类型存放大于long
范围的unsigned_long
会报错。- 对于动态字段,ES 会尝试将整数解析为
long
类型,unsigned_long
整数无法被正确解析。
本文出自 qbit snap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。