本地英文版地址: ../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)的方式将字段存储在磁盘上,以便以后用于排序、聚合或编写脚本? 接受 |
|
如果为 |
|
该字段应该是可搜索的吗?接受 |
|
接受与字段 |
|
字段值是否应该与 |
|
字段的元数据。 |