elasticsearch无法分析日期字段

oknrviil  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(449)

我尝试在kibana开发工具的elasticsearch 5.6上运行以下查询:

{
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "inserted": {
                  "gt": "Thu Aug 20 09:01:31 +0100 2020"
                }
              }
            }
          ]
        }
      }
    }
  }
}

我得到的答复是:

{
  "error": {
    "root_cause": [
      {
        "type": "parse_exception",
        "reason": "failed to parse date field [Thu Aug 20 09:01:31 +0100 2020] with format [EEE MMM dd HH:mm:ss ZZZ yyyy]"
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "can_match",
    "grouped": true,

datetime格式在我看来是正确的,我做错了什么?

6yjfywim

6yjfywim1#

简而言之:“eee mmm dd hh:mm:ss z yyyy”是正确的格式。
细节:
ElasticSearch使用joda库格式化datetime。
摘自es文档
支持完全可自定义的日期格式。这些的语法在joda文档中有解释。
使用joda库,尝试使用“eee-mmm-dd-hh:mm:ss-zzz-yyyy”模式格式化datetime。编程语言是java

DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss ZZZ yyyy");
DateTime dateTime = formatter.parseDateTime("Thu Aug 20 09:01:31 +0100 2020");

导致以下例外情况:
线程“main”java.lang.illegalargumentexception中的异常:无效格式:“thu aug 20 09:01:31+0100 2020”在org.joda.time.format.datetimeformatter.parsedatetime(datetimeformatter)的“+0100 2020”处格式错误。java:866)
推论:“zzz”定义的格式有问题
来自jodadoc
z时区偏移/id区域-0800
根据调查,正确的格式是“eee mmm dd hh:mm:ss z yyyy”,而不是“eee mmm dd hh:mm:ss zzz yyy”。
考虑到#3在Map中定义格式

{
  "mappings": {
    "_doc":{
    "properties": {
      "inserted":{
        "type": "date",
        "format": "EEE MMM dd HH:mm:ss Z yyyy"
      }
    }
  }
  }
}

相关问题