Page tree

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 :

MachineLearning 优酷地址 :

Skip to end of metadata
Go to start of metadata

Numeric 数据类型




PUT my_index
  "mappings": {
    "my_type": {
      "properties": {
        "number_of_bytes": {
          "type": "integer"
        "time_in_seconds": {
          "type": "float"
        "price": {
          "type": "scaled_float",
          "scaling_factor": 100


The doublefloat and half_float types consider that -0.0 and +0.0 are different values. As a consequence, doing a term query on -0.0 will not match +0.0 and vice-versa. Same is true for range queries: if the upper bound is -0.0 then +0.0 will not match, and if the lower bound is +0.0 then -0.0 will not match.


As far as integer types (byteshortinteger and long) are concerned, you should pick the smallest type which is enough for your use-case. This will help indexing and searching be more efficient. Note however that given that storage is optimized based on the actual values that are stored, picking one type over another one will have no impact on storage requirements.

For floating-point types, it is often more efficient to store floating-point data into an integer using a scaling factor, which is what the scaled_float type does under the hood. For instance, a pricefield could be stored in a scaled_float with a scaling_factor of 100. All APIs would work as if the field was stored as a double, but under the hood elasticsearch would be working with the number of cents, price*100, which is an integer. This is mostly helpful to save disk space since integers are way easier to compress than floating points. scaled_float is also fine to use in order to trade accuracy for disk space. For instance imagine that you are tracking cpu utilization as a number between 0 and 1. It usually does not matter much whether cpu utilization is 12.7% or 13%, so you could use a scaled_float with a scaling_factor of 100 in order to round cpu utilization to the closest percent in order to save space.

If scaled_float is not a good fit, then you should pick the smallest type that is enough for the use-case among the floating-point types: doublefloat and half_float. Here is a table that compares these types in order to help make a decision.

类型最小值最大值Significant bits / digits




尝试将字符串转换为数字并截断整数的分数。接受 true(默认)和 false

boostMapping field-level query time boosting. Accepts a floating point number, defaults to 1.0.

Should the field be stored on disk in a column-stride fashion, so that it can later be used for sorting, aggregations, or scripting? Accepts true (default) or false

ignore_malformedIf true, malformed numbers are ignored. If false (default), malformed numbers throw an exception and reject the whole document.
include_in_allWhether or not the field value should be included in the _all field? Accepts true or false. Defaults to false if index is set to false, or if a parentobject field sets include_in_all to false. Otherwise defaults to true.
indexShould the field be searchable? Accepts true (default) and false
null_valueAccepts a numeric value of the same type as the field which is substituted for any explicit null values. Defaults to null, which means the field is treated as missing.

Whether the field value should be stored and retrievable separately from the _source field. Accepts true or false (default).

Parameters for scaled_float

scaled_float accepts an additional parameter:


The scaling factor to use when encoding values. Values will be multiplied by this factor at index time and rounded to the closest long value. For instance, a scaled_float with a scaling_factor of 10 would internally store 2.34 as 23and all search-time operations (queries, aggregations, sorting) will behave as if the document had a value of 2.3. High values of scaling_factor improve accuracy but also increase space requirements. This parameter is required.
  • No labels