繁体   English   中英

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

[英]Is it possible to convert dates when reindexing data in ElasticSearch?

我曾经在映射中有这样的属性:

  "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 .”/“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;"
  }
}

但不清楚如何考虑索引中可能存在的所有可能的日期格式来转换它们。

您可以使用ignore_malformed选项。 但似乎你的约会有时也有时间。 所以我建议您也调整日期格式以允许可选时间。 您可以使用 pipe 指定多种格式,例如"format": "yyyy-MM-dd HH:mm:ss||strict_date_optional_time ||epoch_millis"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM