2017-05-29 5 views
1

Ich möchte sicherstellen, dass alle Dokumente eines bestimmten doc_type eine "updateAt" Zeitmarke (ISO 8601) haben, die aktualisiert wird, wenn das Dokument aktualisiert wird. Es muss ein serverseitiger Zeitstempel sein, da ich nicht weiß, ob ich darauf vertrauen kann, dass alle Client-Zeiten synchron sind.Hinzufügen von "updateAt" Zeitstempel zu elasticsearch Dokumente

Ich verwende eine Ingest-Pipeline, um "createdAt" -Zeitstempel hinzuzufügen, aber es scheint, dass Pipelines nicht mit der Update-API unterstützt werden.

Ich habe versucht, Update-Skripte (mit dem neu verfügbaren 'ctx._now' Wert), aber kann nicht das Parsen in ISO 8601 arbeiten. Außerdem bin ich mir nicht sicher, ob Update-Skripts der wartungsfreundlichste Weg sind, da für jeden Aktualisierungstyp ein benutzerdefiniertes Skript erforderlich ist.

Antwort

0

In meiner Skripte verwende ich folgende schmerzlos Linie updatedAt Zeitstempel zu markieren:

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

Z Zone-ID für UTC-Zeitzone ist. Im Feld updatedAt ist der Datumstyp als date festgelegt. Was seltsam ist, ist, dass das Zuweisen von ctx._now zu Feld auch funktioniert. Aber dann sieht es in der Quelle anders aus als in den übrigen Datumsfeldern. Daher bevorzuge ich den obigen Weg, um die Dinge konsistent zu halten.

Verwandte Themen