本地英文版地址: ../en/number.html
支持以下8种数字类型:
|
|
带符号的64位整数,最小值为 |
|
|
带符号的32位整数,最小值为 |
|
|
带符号的16位整数,最小值为 |
|
|
带符号的8位整数,最小值为 |
|
|
双精度64位 IEEE 754 浮点数,仅限于有限值。 |
|
|
单精度32位 IEEE 754 浮点数,仅限于有限值。 |
|
|
半精度32位 IEEE 754 浮点数,仅限于有限值。 |
|
|
一个由 |
下面是一个使用 numeric 字段配置映射的示例:
PUT my_index
{
"mappings": {
"properties": {
"number_of_bytes": {
"type": "integer"
},
"time_in_seconds": {
"type": "float"
},
"price": {
"type": "scaled_float",
"scaling_factor": 100
}
}
}
}
double、float及half_float类型认为-0.0和+0.0的值是不同的。
因此,在-0.0上进行term查询将与+0.0不匹配,反之亦然。
对于 range 查询也是一样:如果上限是-0.0,则+0.0将不匹配,如果下限是+0.0,则-0.0将不匹配。
就整数类型(byte、short、integer和long)而言,应该选择满足用例的最小类型。
这将有助于提高编制索引和搜索的效率。
但是请注意,存储是基于存储的实际值进行优化的,因此选择一种类型而不是另一种类型不会影响存储需求。
对于浮点类型,使用缩放因子将浮点数据存储到整数中通常更有效,这就是scaled_float类型在底层所做的。
例如,price字段可以存储在scaling_factor值为100的scaled_float中。
所有api的工作原理都是将字段存储为一个 double 类型,但实际上 Elasticsearch 的工作原理是使用一个美分的数值,price*100,这是一个整数。
这对于节省磁盘空间很有帮助,因为整数比浮点更容易压缩。
scaled_float也可以用来以精度换取磁盘空间。
例如,假设你正在跟踪一个0到1之间的数字的 cpu 利用率。
cpu 利用率是12.7%还是13%通常没有多大关系,因此可以使用scaling_factor 值为100的scaled_float,以便将 cpu 利用率四舍五入到最接近的百分比,从而节省空间。
如果scaled_float不是一个很好的选择,那么ni 应该在浮点类型(double、float及half_float)中选择一个对用例来说足够的最小类型。
下面这个表格对这些类型进行了比较,以帮助你做出决定。
| 类型 | 最小值 | 最大值 | 有效位数/数字 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
映射数值型标识
并非所有数值数据都应映射为数值型字段数据类型。
Elasticsearch 为范围(range)查询优化数值型字段,如integer或long。
但是,keyword字段更适合于term和其他词级查询。
标识(identifier),如 ISBN 或产品ID,很少在范围(range)查询中使用。
但是,通常使用词级查询来检索它们。
在以下情况下,考虑将数值型标识映射为keyword:
-
你不打算使用
range查询来搜索标识数据。 -
快速检索很重要。
keyword字段上的term查询搜索通常比数值型字段上的term搜索更快。
如果你不确定应该使用哪一种,可以使用多字段(multi-field)将数据映射为keyword和数值型数据类型。
数值类型接受以下参数:
|
尝试将字符串转换为数字,并截断整数的小数部分。接受 |
|
|
映射字段级查询时提升。接受浮点数,默认值为 |
|
|
是否应该以列跨度(column-stride)的方式将字段存储在磁盘上,以便以后用于排序、聚合或编写脚本? 接受 |
|
|
如果为 |
|
|
该字段应该是可搜索的吗?接受 |
|
|
接受与字段 |
|
|
字段值是否应该与 |
|
|
字段的元数据。 |