Elasticsearch 7:无法解析日期
Elasticsearch 7: Cant parse date
我有一个带有日期字段的映射的 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')
那是因为您提到的日期格式不符合基于 ISO 8601 标准的 date_optional_time
。
来自与 date_optional_time
相关的 elasticsearch link,其中提到了以下评论:
date_optional_time or strict_date_optional_time
A generic ISO datetime parser where the date is mandatory and the time is optional.
基于 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"
}
希望对您有所帮助!
我有一个带有日期字段的映射的 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')
那是因为您提到的日期格式不符合基于 ISO 8601 标准的 date_optional_time
。
来自与 date_optional_time
相关的 elasticsearch link,其中提到了以下评论:
date_optional_time or strict_date_optional_time
A generic ISO datetime parser where the date is mandatory and the time is optional.
基于 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"
}
希望对您有所帮助!