如何向elasticsearch文档添加"updatedAt"时间戳

How to add "updatedAt" timestamp to elasticsearch documents

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

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

的管道

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

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

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

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