无痛:取得时差

时间:2018-11-06 19:08:01

标签: elasticsearch elasticsearch-painless

我对Painless非常陌生。我想编写一个简单的脚本来获取@timestamp和T1之间的时差(以毫秒为单位)。

我尝试使用doc ['somefield']。value和doc ['somefield']。date.millis,但我可以访问 @timestamp ,但不能访问 T1

任何帮助将不胜感激!我在下面发布了示例数据源:

{
  "_source": {
    "@timestamp": "2018-11-06T00:20:08.802Z",
     "fields": {
      "T1": "2018-11-06T00:20:07.862Z",
    }
  }

2 个答案:

答案 0 :(得分:1)

您可以创建一个脚本字段,以返回@timestampfields.T1之间的差异,如下所示:

POST your-index/_search
{
  "script_fields": {
    "diff": {
      "script": {
        "source": """
          def ts = Instant.parse(params._source['@timestamp']);
          def t1 = Instant.parse(params._source.fields.T1);
          return ChronoUnit.MICROS.between(ts, t1);

        """
      }
    }
  }
}

答案 1 :(得分:0)

您可以定义起始值和终止值并返回差值:

def start = doc['start_event'].date.getMillis();
def stop = doc['stop_event'].date.getMillis();
return stop - start;

enter image description here