我曾经在Map中有这样一个属性:
"dueDate": {
"type": "text"
}
现在我把它改成这样:
"dueDate": {
"type": "date",
"format": "dd.MM.yyyy.",
"copy_to": "_content"
}
尝试重新索引旧数据时,会传回错误:
{\"type\":\"mapper_parsing_exception\",\"reason\":\"failed to parse [dueDate]\",\"caused_by\":{\"type\":\"illegal_argument_exception\",\"reason\":\"Invalid format: \\\"15.09.2021. 06:49:18\\\" is malformed at \\\" 06:49:18\\\"\"}},\"status\":400}
大多数dueDates
的数据格式为“15.09.2021."/“dd. MM. yyyy.”(按要求),但也有一些不同格式的例外,如错误消息中的错误同步。
有没有可能自动只保留这些数据中的日期?或者干脆忽略它们作为最后的手段?
我在网上找到了这样一个转换数据的例子:
{
"source": {
"index": "A"
},
"dest": {
"index": "B"
},
"script": {
"source": "long milliSinceEpoch = ctx._source.remove(\"dt_1\"); Instant instant = Instant.ofEpochMilli(milliSinceEpoch); ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.of('Z')); ctx._source.dt_1 = zdt;"
}
}
但不清楚如何考虑索引中可能存在的所有日期格式,以便进行转换。
1条答案
按热度按时间u91tlkcl1#
你可以使用ignore_malformed选项。但是看起来你的日期有时候也有时间。所以我建议你也调整日期格式以允许一个可选的时间。你可以用管道指定多种格式,例如
"format": "yyyy-MM-dd HH:mm:ss||strict_date_optional_time ||epoch_millis"
。