Elasticsearch插入日期报mapper_parsing_exception异常排查
问题原因
日期格式配置的占位符大小写错误,Elasticsearch 日期解析遵循 Java DateTimeFormatter 规范,占位符大小写对应完全不同的语义:
- 小写
mm代表分钟,代表月份的正确占位符是大写MM - 小写
hh代表12小时制小时(取值范围112,需配合AM/PM标识),代表24小时制小时的正确占位符是大写`HH`(取值范围023,支持你传入的00点时间值)
你当前配置的yyyy-mm-dd hh:mm:ss实际语义是「年-分钟-日 12小时制小时:分钟:秒」,和传入的「年-月-日 24小时制小时:分钟:秒」字符串结构不匹配,因此解析到分钟段(对应你看到的索引14位置)时报错。
修复步骤
- 修正日期格式配置,将test_date字段的format改为正确值:
{ "mappings":{ "dynamic":false, "properties":{ "test_date":{ "type":"date", "format":"yyyy-MM-dd HH:mm:ss" } } } }
- 已创建的索引不支持直接修改已有字段的mappings,需要新建符合上述配置的索引,通过reindex接口将原有数据迁移到新索引后再使用。
补充:如果业务中存在多种日期格式,可以用
||拼接多个格式规则做兼容,例如同时支持24小时制和带AM/PM的12小时制可以配置为yyyy-MM-dd HH:mm:ss||yyyy-MM-dd hh:mm:ss a
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

