#elasticsearch
Вопрос:
Я хочу иметь возможность проверить, старше ли документ, чем 60 mins
на основе submittedDateTime
. однако, когда submittedDateTime == 0
он должен использоваться createdDateTime
для вычисления эластичного времени.
Образец _doc
из myindex
:
. . .
_source: {
"createdDateTime": 1630430956428,
"submittedDateTime": 0
}
. . .
Я смог добиться этого с помощью сценариев запросов. Однако я хочу знать, возможно ли это сделать без сценариев? К сожалению, сценарии не сообщают мне количество строк документов, которые были обновлены.
POST myindex/_update_by_query
{
"script": {
"lang": "painless",
"source": """
ZonedDateTime now = ZonedDateTime.ofInstant(Instant.ofEpochMilli(new
Date().getTime()), ZoneId.of('Z'));
long endTimeValue = ctx._source.createdDateTime;
if (ctx._source['submitAfterDateTime'] != 0) {
endTimeValue = ctx._source.submitAfterDateTime;
}
ZonedDateTime endTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(endTimeValue),
ZoneId.of('Z'));
long elapsedMinutes = endTime.until(now, ChronoUnit.MINUTES);
if (elapsedMinutes >= 60) {
ctx._source.status = "EXPIRED",
ctx._source.expiredDateTime = now.toEpochSecond();
}
"""
}
}