Я создаю индекс для хранения продолжительности того, как долго люди смотрят определенное видео, структура индекса выглядит следующим образом:
{
"first_watch_time": "2019-04-01T02:17:14.004Z",
"last_watch_time": "2019-04-01T02:18:24.004Z",
"duration": 70
}
, когда я создаю документ, я использую user_id в качестве документа _id.Например, когда Боб (user_id равен 1) сначала смотрит видео, инициирует событие, в индексе нет документа, и поэтому я создаю его для него:
PUT video_duration/video_duration/1
{
"first_watch_time": event_time,
"duration": 0
}
, поле «first_watch_time» - это когдасобытие произошло.Через некоторое время, когда Боб нажимает кнопку паузы, запускает новое событие, теперь я хочу использовать синтаксис upsert для обновления продолжительности:
POST video_duration/video_duration/1/_update
{
"script": {
"source": "ctx._source.duration += params.duration; ctx._source.last_watch_time = event_time",
"lang": "painless",
"params": {
"duration": "duration(event_time - ctx._source['first_watch_time'])"
}
},
"upsert": {
"duration": 0,
"first_watch_time": event_time
}
}
Теперь вопрос в том, что я не знаю, как писать параметры,и я нахожу, что значение ключа в параметрах выглядит как конкретное значение или строка, а также я не знаю, как вычесть две метки времени в скрипте.Возможно ли использовать upsert для вычисления продолжительности, или мне нужно сначала запросить документ и вычислить продолжительность в памяти, а затем использовать еще один запрос для его обновления?