代码之家  ›  专栏  ›  技术社区  ›  Chandru

要检查的两个不同日期字段是gte还是lte

  •  1
  • Chandru  · 技术社区  · 6 年前

    我是Elasticsearch的新手 6.2.1 和Kibana 6.2.1 . 现在我在基巴纳从事脚本化领域的工作。 我在索引中有两个不同的日期字段,如(resolved\u on和resolve\u due\u by),我想检查resolved\u on是否小于或等于resolve\u due\u 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)) 
    

    谁能帮我一下吗?

    非常感谢。

    2 回复  |  直到 6 年前
        1
  •  0
  •   GPI    6 年前

    根据 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
  •  0
  •   Chandru    6 年前

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

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