带有复杂脚本的ElasticSearch upsert文档

时间:2019-04-10 09:34:29

标签: elasticsearch

我创建一个索引来存储人们观看电视节目多长时间 某些视频,其索引结构如下:

{
    "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计算持续时间,或者我必须先查询文档,然后计算内存中的持续时间,然后再使用一个请求来更新它?

0 个答案:

没有答案