首先,存储在索引中的日期格式为
2021-09-16T14:06:02.000000Z
当我使用
remember
用户选项登录然后注销时,出现以下错误。
ElasticSearch 的回应是
array:3 [▼
"took" => 1
"errors" => true
"items" => array:1 [▼
0 => array:1 [▼
"index" => array:5 [▼
"_index" => "users"
"_type" => "_doc"
"_id" => "313"
"status" => 400
"error" => array:3 [▼
"type" => "mapper_parsing_exception"
"reason" => "failed to parse field [created_at] of type [date] in document with id '313'. Preview of field's value: '2021-09-16 11:37:49'"
"caused_by" => array:3 [▼
"type" => "illegal_argument_exception"
"reason" => "failed to parse date field [2021-09-16 11:37:49] with format [strict_date_optional_time||epoch_millis]"
"caused_by" => array:2 [▼
"type" => "date_time_parse_exception"
"reason" => "Failed to parse with all enclosed parsers"
]
]
]
]
]
]
]
发生这种情况是因为当用户注销时,
remember_token
属性被修改,并且由于User
模型被修改,索引被更新。
问题是,当它尝试更新索引时,它尝试存储在索引中的日期格式不再是
2021-09-16T14:06:02.000000Z
相反,现在日期格式为
2021-09-16 11:37:49
,因此索引中已有的日期格式和它尝试存储的日期格式存在冲突。
仅当用户
framework
更新 User
模型时,才会发生这种情况。
如果我自己更新任何模型的属性,就不会发生这种情况。logs out
我刚刚注意到,然后 UPDATED
更新了
laravel
,它禁用了 remember_token
,这就是日期格式更改为 timestamps
的原因。但是,我仍然不知道如何解决这个问题。
2021-09-16 11:37:49
格式默认为
date
,请参阅 doc。 您可以修复您的应用程序,使其写入
strict_date_optional_time||epoch_millis
而不是
2021-09-16T14:06:02.000000Z
,或者只是 2021-09-16 11:37:49
,因为默认格式
需要的话,请参阅文档内置格式:
2021-09-16
或
通用 ISO 日期时间解析器,其中日期必须至少包含年份和时间(用 T 分隔)是可选的。示例:date_optional_time
strict_date_optional_time
或
。 或者您更改 Elasticsearch 索引的映射,以允许yyyy-MM-dd'T'HH:mm:ss.SSSZ
yyyy-MM-dd
的格式在映射时使用
多种日期格式。您需要显式设置索引的类型(如有必要,然后执行
2021-09-16 11:37:49
将数据拉入新索引)。_reindex
PUT my-index-000001
{
"mappings": {
"properties": {
"created_at": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||strict_date_optional_time ||epoch_millis"
}
}
}
}
格式应该能够像
yyyy-MM-dd HH:mm:ss
一样解析您的数据条目。希望这会有所帮助。
2021-09-16 11:37:49
。
我尝试过但不起作用的其他格式:
2023-01-10 20:15:25.000+0300
2022-01-01
2021-09-16 11:37:49
2023-01-19 05:30:00.000Z
2023-01-19 05:30:00.0000
日期为2023-06-17
有人在这方面取得任何进展吗?