Elasticsearch scaled_float Field Data Type

Pulse - Elasticsearch Operations Done Right

On this page

Example Common issues or misuses Frequently Asked Questions

The scaled_float data type in Elasticsearch is used for storing floating-point numbers with a fixed scaling factor. It's designed to balance precision and storage efficiency, making it ideal for scenarios where you need to work with decimal numbers but don't require the full precision of a regular float or double type.

This field type is particularly useful when you know the required precision in advance. It stores the scaled value as a long, which can be more efficient for indexing and aggregations compared to full floating-point representations. An alternative to scaled_float is the regular float or double type, which you might prefer when you need full floating-point precision or when the scaling factor is not known in advance.

Example

PUT my_index
{
  "mappings": {
    "properties": {
      "price": {
        "type": "scaled_float",
        "scaling_factor": 100
      }
    }
  }
}

PUT my_index/_doc/1
{
  "price": 10.99
}

In this example, the price field is defined as a scaled_float with a scaling factor of 100. This means that the value 10.99 will be stored internally as 1099.

Common issues or misuses

  1. Choosing an inappropriate scaling factor: If the factor is too small, it may lead to loss of precision. If it's too large, it may waste storage space.
  2. Misunderstanding the internal representation: Users might forget that queries and aggregations work on the scaled integer value, not the original float.
  3. Using scaled_float for values that require high precision or a wide range of scales.
  4. Changing the scaling factor after indexing data, which can lead to inconsistencies.

Frequently Asked Questions

Q: What's the difference between scaled_float and regular float in Elasticsearch?
A: scaled_float stores values as scaled integers, offering better performance for certain operations, while float stores full floating-point representations. scaled_float is more efficient but has fixed precision determined by the scaling factor.

Q: Can I change the scaling factor of a scaled_float field after indexing data?
A: No, you cannot change the scaling factor of an existing field. You would need to reindex your data with a new mapping if you want to change the scaling factor.

Q: How do I choose the right scaling factor for a scaled_float field?
A: Choose a scaling factor that provides enough precision for your use case without wasting storage. For example, use 100 for two decimal places, 1000 for three, etc.

Q: Are there any performance benefits to using scaled_float over float or double?
A: Yes, scaled_float can offer better performance for indexing and aggregations because it's stored as a long integer internally. However, the actual benefit depends on your specific use case and data.

Q: Can I use scaled_float for scientific notation or very large/small numbers?
A: scaled_float is not ideal for numbers that require scientific notation or have a wide range of scales. For such cases, double or float would be more appropriate.

Pulse - Elasticsearch Operations Done Right

Stop googling errors and staring at dashboards.

Free Trial

Subscribe to the Pulse Newsletter

Get early access to new Pulse features, insightful blogs & exclusive events , webinars, and workshops.