如何计算ElasticSearch中两个日期时间之间的差异

fuz*_*eto 5 datediff elasticsearch

我正在使用ES,我需要一个返回两个日期时间(mysql timediff)之间差异的查询,但是没有找到ES的任何功能来执行此操作.有人可以帮帮我吗?

MySQL查询

SELECT SEC_TO_TIME(
    AVG(
      TIME_TO_SEC(
        TIMEDIFF(r.acctstoptime,r.acctstarttime)
      )
    )
) as average_access

FROM radacct
Run Code Online (Sandbox Code Playgroud)

谢谢!

Vin*_*han 9

你最好的是脚本字段.如果您已启用动态脚本并且这些日期字段在映射中定义为日期,则上述搜索查询应该有效.

{
  "script_fields": {
    "test1": {
      "script": "doc['acctstoptime'].value - doc['acctstarttime'].value"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您将获得epoch中的结果,您需要将其转换为您的面额.

你可以阅读有关脚本场在这里和它的一些例子在这里.


bru*_*ski 8

这是使用脚本字段的另一个示例。它将日期转换为自纪元以来的毫秒数,将两者相减并将结果转换为两个日期之间的天数。

{
"query": {
    "bool": {
    "must": [
        {
        "exists": {
            "field": "priorTransactionDate"
        }
        },
        {
        "script": {
            "script": "(doc['transactionDate'].date.millis - doc['priorTransactionDate'].date.millis)/1000/86400 < 365"
        }
        }
    ]
    }
}
}
Run Code Online (Sandbox Code Playgroud)