从 ElasticSearch 查询中的日期字段中提取日期 (yyyyMMdd)
Extract date (yyyyMMdd) from date field in ElasticSearch query
我的索引有一个格式为 2020-01-04T05:00:06.870000Z
的日期字段。在 ES 查询响应中,我需要 yyyyMMdd
形式的日期,因此 20200104
。我尝试使用脚本查询并分别提取日、月和年。我如何在 _source
中连接它们以获得 number
形式的 yyyyMMdd
?
示例数据:
"_source": {
"updated": "2020-01-04T05:00:06.870000Z"
}
"_source": {
"updated": "2020-01-04T09:00:08.870000Z"
}
"_source": {
"updated": "2019-12-04T01:00:06.870000Z"
}
}
查询:
"sort" : [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "doc['updated'].value.getYear()"
//similarly use getMonthOfYear() and getDayOfMonth(). How to concatenate and convert to number ?
},
"order": "desc"
}
}
]
您可以使用 String.format
正确填写数字,然后 Integer.parseInt
结果。
或者您可以选择以下选项:
GET dates/_search
{
"sort": [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": """
Integer.parseInt(
DateTimeFormatter
.ofPattern("yyyyMMdd")
.withZone(ZoneOffset.UTC)
.format(Instant.ofEpochMilli(
doc['updated'].value.millis)
));
"""
},
"order": "desc"
}
}
]
}
我的索引有一个格式为 2020-01-04T05:00:06.870000Z
的日期字段。在 ES 查询响应中,我需要 yyyyMMdd
形式的日期,因此 20200104
。我尝试使用脚本查询并分别提取日、月和年。我如何在 _source
中连接它们以获得 number
形式的 yyyyMMdd
?
示例数据:
"_source": {
"updated": "2020-01-04T05:00:06.870000Z"
}
"_source": {
"updated": "2020-01-04T09:00:08.870000Z"
}
"_source": {
"updated": "2019-12-04T01:00:06.870000Z"
}
}
查询:
"sort" : [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "doc['updated'].value.getYear()"
//similarly use getMonthOfYear() and getDayOfMonth(). How to concatenate and convert to number ?
},
"order": "desc"
}
}
]
您可以使用 String.format
正确填写数字,然后 Integer.parseInt
结果。
或者您可以选择以下选项:
GET dates/_search
{
"sort": [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": """
Integer.parseInt(
DateTimeFormatter
.ofPattern("yyyyMMdd")
.withZone(ZoneOffset.UTC)
.format(Instant.ofEpochMilli(
doc['updated'].value.millis)
));
"""
},
"order": "desc"
}
}
]
}