Я использую Elasticsearch 2.4 и скрипт Groovy. В моем документе есть поле doc['created_unix_timestamp']
типа integer
, которое содержит временную метку Unix. В сценарии поискового запроса я пытаюсь получить YYYYMM
из этого значения.
Например, если doc['created_unix_timestamp']
равно 1522703848
, то в сценарии во время расчета я хочу преобразовать его в 201804
, где первые 4 цифры — это год, а последние две — месяц (с добавлением 0, если требуется)
Я старался:
Integer.parseInt(new SimpleDateFormat('YYYYMM').format(new Date(doc['created_unix_timestamp'])))
Но выдает "ошибку компиляции" "TransportError(400, 'search_phase_execution_exception', 'failed to compile groovy script')"
. Любая идея, как заставить его работать или каков правильный синтаксис?
SimpleDateFormat
? Вы пробовали более похожий на Groovy подход -(new Date(doc.created_unix_timestamp).format('yyyyMM')).toInteger()
? - person Szymon Stepniak   schedule 03.04.2018return (new Date(1522703848).format('yyyyMM')).toInteger()
вернуть197001
то есть январь 1970 года, хотя должен был быть201804
- person JVK   schedule 03.04.2018new Date(1522703848).format('yyyyMM')
это равноNone
- person JVK   schedule 03.04.2018Date
ожидает в миллисекундах docs.oracle.com/javase/6/docs/api/java/util/ , поэтому я изменил строку на(new Date(1522705958L*1000).format('yyyyMM')).toInteger()
, и это сработало. Спасибо за помощь. - person JVK   schedule 03.04.2018