嗨,我的开放搜索索引中有一个字段
@timestamp
,它看起来像文档中的 JSON:“@timestamp”: “2024-06-03T20:31:06.40402165Z”,
。我尝试在 spring data opensearch 文档记录中使用以下字段检索值:
@Field(name = "@timestamp" type = FieldType.Date) Instant atTimestamp,
但我收到以下错误:
2024-06-14 14:13:47 org.springframework.data.elasticsearch.core.convert.ConversionException: Unable to convert value '2024-06-03T20:30:17.058647704Z' to java.time.Instant for property 'atTimestamp'
为了解决这个问题,我尝试向字段添加一个模式,如下所示:
pattern = "YYYY-MM-DDThh:mm:ss.sssssssssZ
,但他给出了以下错误:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'auditLogRepository' defined in com.my.java.project defined in @EnableElasticsearchRepositories declared on OpenSearchConfig: Too many pattern letters: s
所以我尝试使用 DateFormat 添加格式:
format = {
DateFormat.date_time_no_millis,
DateFormat.strict_date_optional_time_nanos,
DateFormat.date_optional_time,
DateFormat.epoch_millis
})
但这只是给出了最初的错误。现在我只是在墙上扔图案,然后跳一些东西粘在上面,但似乎没有任何作用。 这是我迄今为止尝试过的:
@Field(
name = "@timestamp",
type = FieldType.Date,
pattern = {
"uuuu-MM-dd['T'HH:mm:ss.SSSSSSXXX]",
"uuuu-MM-dd['T'HH:mm:ss.SSSSSSXXXZ]",
"uuuu-MM-dd['T'HH:mm:ss.SSSSSSXXXZD]",
"uuuu-MM-dd['T'HH:mm:ss.SSSSSSXXX]Z",
"YYYY-MM-DD'T'HH:mm:ss.SSSSSSXXXZ",
"yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXZ",
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
"yyyy-MM-dd'T'HH:mm:ss.SSSXXXZ",
"yyyy-MM-dd'T'HH:mm:ss.SSSXXXZD",
"YYYY-MM-DD'T'hh:mm:ss,s'T'ZD",
"YYYY-MM-DD['T'hh:mm:ss.SSSSSSXXXZ]",
"YYYY-MM-DD['T'hh:mm:ss.SSSSSSXXXZD]",
"YYYY-MM-DD['T'hh:mm:ss.SSSSSSXXX]Z",
"YYYY-MM-DD['T'hh:mm:ss.SSSSSSXXX]ZD",
"uuuu-MM-dd['T'HH:mm:ss.SSSSSSXXX]ZD"
})
Instant atTimestamp,
有谁知道我应该如何正确转换它?感谢您提前提供帮助
我认为你想要的格式是
uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSSX
。
这是一个通过的测试:
@Test
@DisplayName("should convert nanos")
void shouldConvertNanos() {
ElasticsearchDateConverter converter = ElasticsearchDateConverter.of("uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSSX");
LocalDateTime parsed = converter.parse("2024-06-03T20:30:17.058647704Z", LocalDateTime.class);
assertThat(parsed).isEqualTo(LocalDateTime.of(2024, 6, 3, 20,30, 17, 58647704));
}