Kibana脚本字段-文本到时间戳的转换解析异常

时间:2019-01-23 16:56:06

标签: java elasticsearch timestamp kibana

我无法通过使用Kibana中的脚本化字段将ES索引中的文本字段ts1(样本值2017-09-30 04:53:39.412496Z)转换为时间戳。 SimpleDateFormat表达式在Java中有效,而在Elasticsearch中则无效。 This提到了类似的问题,但该解决方案对我不起作用。

查询

GET <index_name>/_search
{
    "query" : {
        "match_all": {}
    },
    "script_fields" : {
        "test1" : {
            "script" : {
                "lang": "painless",
                "source": """new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS'Z'").parse(doc['ts1'].value).getTime()"""
            }
        }
    }
}

输出

{
  "took": 76,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 4,
    "skipped": 0,
    "failed": 1,
    "failures": [
      {
        "shard": 3,
        "index": "<index_name>",
        "node": "-TjsxK4-QsqgLQRQ-DSKGQ",
        "reason": {
          "type": "script_exception",
          "reason": "runtime error",
          "script_stack": [
            "java.text.DateFormat.parse(DateFormat.java:366)",
            """new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS'Z'").parse(doc['ts1'].value).getTime()""",
            "                                                                      ^---- HERE"
          ],
          "script": """new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS'Z'").parse(doc['ts1'].value).getTime()""",
          "lang": "painless",
          "caused_by": {
            "type": "parse_exception",
            "reason": """Unparseable date: "04""""
          }
        }
      }
    ]
  },
  "hits": {
    "total": 1,
    "max_score": 1,
    "hits": []
  }
}

有效的Java代码-

import java.text.SimpleDateFormat;
public class Main{

    public static void main(String []args){
        String text2 = "2017-09-30 04:53:39.123123Z";

        SimpleDateFormat s2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS'Z'");
        try {
            System.out.println(s2.parse(text2).getTime());
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

0 个答案:

没有答案