elasticsearch,Date,elasticsearch" /> elasticsearch,Date,elasticsearch" />

错误:无法分析格式为[strict_date_optional_time | epoch_millis]的日期字段[2021-H1]

错误:无法分析格式为[strict_date_optional_time | epoch_millis]的日期字段[2021-H1],date,elasticsearch,Date,elasticsearch,我正在尝试使用非传统的日期格式从弹性搜索中获取日期。elastic search中的我的字段通过“ignore_malformed”接受这些日期:true,但当我尝试获取这些日期时,会出现此错误。我的日期格式为:YYYY-Q[1-4]、YYYY-H[1-2]、YYYY-[EARLY | MID | LATE] 有人能建议我如何检索这些日期/范围吗?这里有几件事。在开始之前,让我们先澄清一下术语抓取可能很好-您的问题与摄取(以及随后的解析)您的自定义日期字段有关 让我们从最重要的一点开始。 对于年

我正在尝试使用非传统的日期格式从弹性搜索中获取日期。elastic search中的我的字段通过“ignore_malformed”接受这些日期:true,但当我尝试获取这些日期时,会出现此错误。我的日期格式为:YYYY-Q[1-4]、YYYY-H[1-2]、YYYY-[EARLY | MID | LATE]
有人能建议我如何检索这些日期/范围吗?

这里有几件事。在开始之前,让我们先澄清一下术语抓取可能很好-您的问题与摄取(以及随后的解析)您的自定义日期字段有关

让我们从最重要的一点开始。

对于年度季度、半年或“季节”,没有标准的日期格式。 正如文章中所讨论的,不同的公司划分年份的方式不同

也就是说,Elasticsearch将只能解析日期字符串的
年份
部分。为了实施问题中的三种自定义格式,您可以定义以下映射:

放入我的索引/
{
“映射”:{
“财产”:{
“时间字段”:{
“类型”:“日期”,
“格式”:“uuuu-['Q'][1][2][3][4]| | UUU-['H1']['H2']| | UUU-['EARLY']['MID']['LATE']”
}
}
}
}
顺便说一句,还有更多关于自定义日期格式的内容

之后,您可以尝试摄入三种变体:

发布我的索引/\u文档
{
“id”:“2021-Q2”,
“时间字段”:“2021-Q2”
}
发布我的索引/\u文档
{
“id”:“2021-H1”,
“时间字段”:“2021-H1”
}
发布我的索引/\u文档
{
“id”:“2021年晚些时候”,
“时间字段”:“2021-晚”
}
为了验证日期是如何在内部解析的,您可以像这样利用:

GET my index/\u search?filter\u path=hits.hits.\u source.id,hits.hits.fields
{
“_来源”:“id”,
“脚本_字段”:{
“探索时间字段”:{
“脚本”:{
“郎”:“无痛”,
“来源”:”
LocalDateTime.ofInstant(
Instant.ofEpochMilli(doc['time_field'].value.toInstant().toEpochMilli()),
区域ID('UTC')
).format(模式的DateTimeFormatter.of(“yyyy-MM-dd HH:MM:ss”))
"""
}
}
}
}
这将返回:

{
“点击次数”:{
“点击次数”:[
{
“_来源”:{
“id”:“2021-Q2”
},
“字段”:{
“探索时间字段”:[
"2021-01-01 00:00:00"
]
}
},
{
“_来源”:{
“id”:“2021-H1”
},
“字段”:{
“探索时间字段”:[
"2021-01-01 00:00:00"
]
}
},
{
“_来源”:{
“id”:“2021年晚些时候”
},
“字段”:{
“探索时间字段”:[
"2021-01-01 00:00:00"
]
}
}
]
}
}
如您所见,由于只提取了年份组件,其余的日期时间组件被分配了(
Jan 1st 00:00:00


这当然不是你想要的,所以你最好先解析自定义日期字符串,然后再将它们输入Elasticsearch。这个@Marriam运气好吗?