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

Elasticsearch 7:无法分析日期

  •  0
  • AbtPst  · 技术社区  · 7 年前

    我有一个elasticsearch索引,它的映射有一个日期字段

    "datetime": {
                    "type": "date",
                    "format": "date_optional_time"
                }
    

    但是当我试着进去的时候

    '05/09/2019 11:43:09 AM'

    索引它,我得到

    elasticsearch.exceptions.RequestError: RequestError(400, u'mapper_parsing_exception', u"failed to parse field [datetime] of type [date] in document with id 'VhhGBWsBeH-i3pqE8QBW'")
    

    "datetime": {
                   "type": "text"
                }
    

    我做错什么了?我应该使用哪种日期格式 05/09/2019 11:43:09 AM ?

    非常感谢你的帮助。还有一件事,上面的格式不适合 '05/09/2019 01:00:37 PM' 或任何价值 PM . 我试过了

    "datetime": {
                    "type": "date",
                    "format": "MM/dd/yyyy HH:mm:ss a||MM/dd/yyyy HH:mm:ss p"
                }
    

    但我知道

    "Invalid format: [MM/dd/yyyy HH:mm:ss p]: Pad letter 'p' must be followed by valid pad pattern: MM/dd/yyyy HH:mm:ss p"

    如果我试着

    "datetime": {
                    "type": "date",
                    "format": "MM/dd/yyyy HH:mm:ss aa"
                }
    

    我明白了

    elasticsearch.exceptions.RequestError: RequestError(400, u'illegal_argument_exception', u'Invalid format: [MM/dd/yyyy HH:mm:ss aa]: Too many pattern letters: a')
    
    0 回复  |  直到 7 年前
        1
  •  1
  •   Kamal Kunjapur    7 年前

    那是因为你提到的约会格式不符合 date_optional_time

    elasticsearch link ,其中提到以下评论:

    日期可选时间 严格日期可选时间

    一个通用的ISO date time解析器,其中日期是必需的,时间是可选的。

    根据ISO 8601,以下是一些有效值:

    • yyyy-MM-ddTHH:mm:ss
    • yyyy-MM-ddTHH:mm
    • yyyy-MM-ddTHH:mm:ss.SSSSSSSSS

    还要注意,ISO 8601 .

    所以看看你的样本,下面的日期值就可以了。

    POST <your_index_name>/_doc/1
    {
      "datetime": "2019-05-09T13:30:00"
    }
    

    解决方案:

    你要找的格式是 MM/dd/yyyy hh:mm:ss a 或者 dd/MM/yyyy hh:mm:ss a

    下面是你的地图。

    PUT <your_index_name>
    {  
       "mappings":{  
          "properties":{  
             "datetime":{  
                "type":"date",
                "format":"date_optional_time||MM/dd/yyyy hh:mm:ss a"
             }
          }
       }
    }
    

    POST <your_index_name>/_doc/1
    {
      "datetime": "05/09/2019 11:43:09 AM"
    }