Извлечь дату (ггггММдд) из поля даты в запросе ElasticSearch
В моем индексе есть поле даты, отформатированное как
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"
}
}
]
1 ответ
Решение
Вы могли бы использовать
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"
}
}
]
}