如何在弹性搜索脚本中进行日期比较?

时间:2017-02-01 21:48:11

标签: elasticsearch

我正在尝试编写一个更新脚本,只有当updatedAt字段的日期大于源记录上的updatedAt日期时才更新记录。

这是我正在使用的脚本,不介意$和{}它们是javascript中的字符串文字语法。

该脚本使用无痛。

`ctx.op = ${moment(updatedAt).unix()} > ctx._source["updatedAt"] ? "update" : "none";`

该字段的映射是没有指定格式的日期。当我尝试执行此查询时,我收到此错误:

{
  "took": 7,
  "errors": true,
  "items": [
    {
      "update": {
        "_index": "search",
        "_type": "locations",
        "_id": "119",
        "status": 400,
        "error": {
          "type": "illegal_argument_exception",
          "reason": "failed to execute script",
          "caused_by": {
            "type": "script_exception",
            "reason": "runtime error",
            "caused_by": {
              "type": "class_cast_exception",
              "reason": "Cannot apply [>] operation to types [java.lang.Integer] and [java.lang.String]."
            },
            "script_stack": [
              "ctx.op = 1485985330 > ctx._source[\"updatedAt\"] ? \"update\" : \"none\";",
              "                                 ^---- HERE"
            ],
            "script": "ctx.op = 1485985330 > ctx._source[\"updatedAt\"] ? \"update\" : \"none\";",
            "lang": "painless"
          }
        }
      }
    }
  ]
}

0 个答案:

没有答案