You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch用Painless更新无关字段时报timestamp解析异常

Elasticsearch更新文档@timestamp字段解析异常解决方案

异常产生原因

  • 查询操作仅读取已经索引处理完成的字段数据,不会重新解析_source中的原始字段值,因此不会触发格式校验;而更新操作需要先加载完整的_source内容,对所有字段重新做类型匹配和解析,因此会触发报错。
  • 写入原始文档时,@timestamp的原始值以科学计数法格式的浮点数/字符串(如报错中提到的1.638642742E12)存入了_source,你配置的epoch_millis日期格式解析器默认仅支持纯数字格式的毫秒值,无法识别科学计数法格式的数值,最终解析失败抛出异常。
  • 写入时未报错是因为ES索引层自动将科学计数法的数值隐式转换为long类型的毫秒值完成了索引构建,但_source中仍然保留了写入时的原始格式内容。

解决方案

临时解决单次更新问题

执行更新时在无痛脚本中先转换@timestamp的格式,避免解析报错:

POST /data_hip/_update/1638643727.0
{
  "script": {
    "source": """
      ctx._source.avgmer = 4;
      // 将科学计数法格式的timestamp转换为long类型的毫秒值
      ctx._source['@timestamp'] = (long)Double.parseDouble(ctx._source['@timestamp'].toString());
    """
  }
}

永久解决同类问题

二选一即可:

  1. 修改@timestamp字段映射,新增对浮点型毫秒值的适配,修改后的映射如下:
"@timestamp": {
  "type": "date",
  "format": "epoch_millis||strict_epoch_millis"
}
  1. 重建全量索引,写入新索引时将所有@timestamp字段统一转换为纯数字格式的毫秒值,从根源上避免后续再出现同类解析异常。

内容的提问来源于stack exchange,提问作者Tommie Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:06:03