我创建一个索引来存储人们观看电视节目多长时间 某些视频,其索引结构如下:
{
"first_watch_time": "2019-04-01T02:17:14.004Z",
"last_watch_time": "2019-04-01T02:18:24.004Z",
"duration": 70
}
创建文档时,我将user_id用作文档_id。例如,当Bob(user_id为1)首先观看视频,触发事件,索引中没有文档,因此我为他创建了一个文档:
PUT video_duration/video_duration/1
{
"first_watch_time": event_time,
"duration": 0
}
字段“ first_watch_time”是事件发生的时间。 过一会儿,当Bob单击“暂停”按钮时,触发一个新事件,现在我想使用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计算持续时间,或者我必须先查询文档,然后计算内存中的持续时间,然后再使用一个请求来更新它?