【问题标题】:How to calculate difference between two datetime in ElasticSearch如何计算 ElasticSearch 中两个日期时间之间的差异
【发布时间】:2015-09-18 18:21:54
【问题描述】:

我正在使用 ES,我需要一个返回两个日期时间(mysql timediff)之间差异的查询,但还没有找到 ES 的任何功能来做到这一点。谁能帮帮我?

MySQL 查询

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

FROM radacct

谢谢!

【问题讨论】:

    标签: elasticsearch datediff


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 它工作!!!!但我必须在 config/elasticsearch.yml 上启用动态脚本。在here 中查看更多信息谢谢!!!!!!
    【解决方案2】:

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

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

    【讨论】:

    • ElasticSearch 1.4 这里 - 在我的情况下,我需要将所有数字设为小数(而不是整数)以进行除法工作。即/1000.0/86400.0 - 以防脚本部分不适合您!
    猜你喜欢
    • 2021-11-25
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多