ElasticSearch Script query查询double值时丢失小数部分如何解决
问题根因
- 你编写的Painless脚本没有正确获取double字段的实际值:
doc['area_count']返回的是ScriptDocValues类型的字段访问对象,而非存储的数值本身,terms聚合处理该对象时默认会提取整数部分,最终导致返回结果丢失小数位。 - 该问题不需要修改Elasticsearch全局配置,仅调整查询语句即可修复。
修复后的查询语句
POST gs011_tasks/_search { "from": 0, "size": 0, "version": true, "aggregations": { "DB_PLOTS": { "terms": { "script": { "source": "doc['area_count'].value", "lang": "painless" } } } } }
可选优化建议
- 如果
area_count字段存在无值的文档,可添加空值判断避免脚本报错,示例脚本:doc['area_count'].size() == 0 ? 0.0 : doc['area_count'].value - 若需要固定返回的小数位数,可直接在脚本中做精度处理,比如保留4位小数:
doc['area_count'].value.round(4) - 若不同的
area_count取值数量超过10,可在terms聚合参数中添加size配置自定义返回的分组数量,避免结果遗漏。
内容的提问来源于stack exchange,提问作者Ram Prasad
相关产品推荐
相关产品推荐

