coerce
Data is not always clean. Depending on how it is produced a number might be rendered in the JSON body as a true JSON number, e.g. 5
, but it might also be rendered as a string, e.g. "5"
. Alternatively, a number that should be an integer might instead be rendered as a floating point, e.g. 5.0
, or even "5.0"
.
Coercion attempts to clean up dirty values to fit the data type of a field. For instance:
- Strings will be coerced to numbers.
- Floating points will be truncated for integer values.
For instance:
PUT my-index-000001
{
"mappings": {
"properties": {
"number_one": {
"type": "integer"
},
"number_two": {
"type": "integer",
"coerce": false
}
}
}
}
PUT my-index-000001/_doc/1
{
"number_one": "10"
}
PUT my-index-000001/_doc/2
{
"number_two": "10"
}
The | |
This document will be rejected because coercion is disabled. |
The coerce
setting value can be updated on existing fields using the PUT mapping API.
Index-level default
The index.mapping.coerce
setting can be set on the index level to disable coercion globally across all mapping types:
PUT my-index-000001
{
"settings": {
"index.mapping.coerce": false
},
"mappings": {
"properties": {
"number_one": {
"type": "integer",
"coerce": true
},
"number_two": {
"type": "integer"
}
}
}
}
PUT my-index-000001/_doc/1
{ "number_one": "10" }
PUT my-index-000001/_doc/2
{ "number_two": "10" }
The | |
This document will be rejected because the |