我有一个带有带有日期字段的映射的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
之类的日期使用哪种日期格式?
@Kamal
非常感谢您的帮助。仅此而已,上述格式对于'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 :(得分:1)
这是因为您提到的日期格式不符合date_optional_time
,它基于ISO 8601标准。
在与date_optional_time
相关的elasticsearch link中,它提到了以下注释:
date_optional_time 或 strict_date_optional_time
通用的ISO日期时间解析器,其中日期为必填项,时间为可选。
根据ISO 8601,以下是一些有效值:
yyyy-MM-ddTHH:mm:ss
yyyy-MM-ddTHH:mm
yyyy-MM-ddTHH:mm:ss.SSSSSSSSS
。 还要注意,ISO 8601 使用24小时日期格式。
因此,查看您的样本,以下日期值将对此有效。
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"
}
希望有帮助!