在ElasticSearch中重新索引数据时是否可以转换日期?

bwitn5fc  于 2022-11-28  发布在  ElasticSearch
关注(0)|答案(1)|浏览(159)

我曾经在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;"
  }
}

但不清楚如何考虑索引中可能存在的所有日期格式,以便进行转换。

u91tlkcl

u91tlkcl1#

你可以使用ignore_malformed选项。但是看起来你的日期有时候也有时间。所以我建议你也调整日期格式以允许一个可选的时间。你可以用管道指定多种格式,例如"format": "yyyy-MM-dd HH:mm:ss||strict_date_optional_time ||epoch_millis"

相关问题