弹性搜索无法解析格式为 [strict_date_Optional_time||epoch_millis] 的日期字段

问题描述 投票:0回答:3

首先,存储在索引中的日期格式为

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
的原因。
但是,我仍然不知道如何解决这个问题。

laravel elasticsearch laravel-scout
3个回答
11
投票
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

date_optional_time
通用 ISO 日期时间解析器,其中日期必须至少包含年份和时间(用 T 分隔)是可选的。示例:

strict_date_optional_time

yyyy-MM-dd'T'HH:mm:ss.SSSZ

或者您更改 Elasticsearch 索引的映射,以允许
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
一样解析您的数据条目。
希望这会有所帮助。


1
投票
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
  • 
        

0
投票

2023-01-19 05:30:00.0000

日期为2023-06-17

有人在这方面取得任何进展吗?

© www.soinside.com 2019 - 2024. All rights reserved.