【问题标题】:Two different date fields want to check is gte or lte要检查的两个不同日期字段是 gte 或 lte
【发布时间】:2018-02-27 20:26:28
【问题描述】:

我是 Elasticsearch 6.2.1 和 Kibana 6.2.1 的新手。现在正在 kibana 中编写脚本字段。 我在索引中有两个不同的日期字段,例如(resolved_on 和 resolve_due_by)我想检查 resolve_on 是否小于或等于 resolve_due_bye 的条件。我尝试了一些如下所示的脚本查询

doc['resolved_on'] <= doc['resolve_due_by']  <!-- This not working -->

下面的代码现在可以工作了。我不知道进行两次约会是否正确。

((doc['resolved_on'].date.dayOfYear <= doc['resolve_due_by'].date.dayOfYear) && (doc['resolved_on'].date.millisOfDay <= doc['resolve_due_by'].date.millisOfDay)) 

谁能帮帮我?

谢谢

【问题讨论】:

    标签: elasticsearch kibana


    【解决方案1】:

    根据the documentation,在无痛脚本语言中,日期字段公开为 ReadableDateTime

    日期字段公开为ReadableDateTime,因此它们支持getYear 和getDayOfWeek 等方法。 获取自 epoch 调用 getMillis 以来的毫秒数

    他们给出了下面的例子

    GET hockey/_search
    {
      "script_fields": {
        "birth_year": {
          "script": {
            "source": "doc.born.value.year"
          }
        }
      }
    }
    

    获得getMillis 后,您将返回比较long 的值。

    此外,我假设这是一个 JodaTime 类(有关完整文档,请参阅 Joda Time API documentation),您还可以使用 isBefore() 或 isAfter() 方法。

    【讨论】:

    • 感谢您的回答。我找到了这个问题的解决方案并发布了答案。
    【解决方案2】:

    我终于找到了我的问题的解决方案。工作代码如下

    (((!doc['resolved_on'].empty) && (doc['resolved_on'].value.getMillis() > doc['resolve_due_by'].value.getMillis())))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-21
      • 2011-07-11
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 2013-06-07
      • 2020-08-19
      相关资源
      最近更新 更多