适用版本: 6.8-8.x
1. 错误异常的基本描述 #
failed to parse job document [hit.getId()] 出现在机器学习模块读取作业配置文档时。源码中会把搜索命中的 _source 交给 Job.LENIENT_PARSER 解析;如果命中内容不是合法的作业配置,就会抛出这个异常。
常见现象 #
- 查看 ML job、启动 job、恢复 anomaly detection 作业时失败。
- 某个特定 job 报错,其他 job 正常。
- 服务端日志会明确给出失败文档的
_id。
2. 为什么会发生这个错误 #
.ml-config中某个 job 文档字段缺失、字段类型错误,或 JSON 已损坏。- 升级、快照恢复、跨环境迁移后,旧 job 配置与当前版本解析器不兼容。
- 有外部脚本直接修改了 ML 系统索引。
_source被截断或编码异常,导致 lenient parser 也无法完成解析。
3. 排查步骤 #
- 根据异常中的
hit.getId()找到对应 job 文档。 - 直接查询
.ml-config中该文档,与正常 job 的_source做结构对比。 - 重点检查 detector、analysis_config、data_description、model_plot_config 等关键字段。
- 回看升级、恢复、重建 ML 配置索引的记录。
- 核实是否存在自动化程序直接写入或批量修补
.ml-config。
4. 修复建议 #
- 能通过 API 重新创建的 job,优先导出后重建,不要直接修补系统索引。
- 如果确认文档损坏,先备份,再删除异常文档并用官方 API 重建。
- 升级时避免直接搬运不受支持版本的 ML 配置索引。
- 修复完成后重新打开 job,并验证配置读取、启动与统计接口是否恢复。
5. 小结 #
这类异常的根因通常不在用户查询,而在 ML 作业配置文档已经不再符合当前版本的 Job 结构要求。找到出错 job 文档并核对系统索引内容,是最快的切入点。
相关错误 #
- failed-to-parse-search-hit-for-ids:无法解析搜索命中中的 Transform ID
- hit-failed-to-parse-source:搜索命中的 _source 解析失败
- failed-to-parse-request:请求解析失败
附:日志上下文 #
下面保留当前页面中的源码或日志片段,便于继续结合异常调用栈定位问题:
XContentParser parser = XContentFactory.xContent(XContentType.JSON)
.createParser(NamedXContentRegistry.EMPTY; LoggingDeprecationHandler.INSTANCE; stream)
) {
return Job.LENIENT_PARSER.apply(parser; null);
} catch (IOException e) {
throw new ElasticsearchParseException("failed to parse job document [" + hit.getId() + "]"; e);
}
}
}





