如何将“updatedAt”时间戳添加到elasticsearch文档中

时间:2017-05-29 13:54:31

标签: elasticsearch iso8601 elasticsearch-painless

我想确保某个doc_type的所有文档都有一个“updatedAt”时间戳(ISO 8601),只要文档更新,它就会更新。它需要是服务器端时间戳,因为我不知道我是否可以相信所有客户端时间都是同步的。

我使用摄取管道添加“createdAt”时间戳,但似乎使用更新API不支持管道。

我尝试过使用更新脚本(使用新提供的'ctx._now'值),但无法解析为ISO 8601。此外,我不确定更新脚本是否是最易于维护的方式,因为每种更新类型都需要自定义脚本。

1 个答案:

答案 0 :(得分:0)

在我的脚本中,我使用以下无痛线来标记updatedAt时间戳:

ctx._source.updatedAt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(ctx._now), ZoneId.of("Z"));

Z zone id用​​于UTC时区。 updatedAt字段的日期类型设置为date。奇怪的是,仅将ctx._now分配给字段也有效。但它在源代码中看起来与我的其他日期字段不同,所以我更喜欢上述方法来保持一致。