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

时间:2015-09-18 18:21:55

标签: elasticsearch datediff

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

MySQL查询

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

FROM radacct

谢谢!

2 个答案:

答案 0 :(得分:7)

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

{
  "script_fields": {
    "test1": {
      "script": "doc['acctstoptime'].value - doc['acctstarttime'].value"
    }
  }
}

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

您可以在此处阅读scripted field及其中的一些示例here

答案 1 :(得分:3)

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

import java.util.concurrent.Executors
import scala.concurrent.ExecutionContext

val context = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))
val seqOfFutures = Seq.fill(700)(Future { callRestApi() }(context))
val sequenceFuture = Future.sequence(seqOfFutures)(ExecutionContext.global)