我使用的是Elasticsearch 2.4,我有一个Groovy脚本。我的文档中有一个字段doc['created_unix_timestamp']
,类型为integer
,它包含Unix时间戳。在搜索查询的脚本中,我尝试从该值获取YYYYMM
。
例如,如果doc['created_unix_timestamp']
是1522703848
,那么在计算过程中的脚本中,我想将其转换为201804
,其中前4位是年,最后2位是月(填充0,如果需要)
我试过了:
Integer.parseInt(new SimpleDateFormat('YYYYMM').format(new Date(doc['created_unix_timestamp'])))
但它会抛出“编译错误”"TransportError(400, 'search_phase_execution_exception', 'failed to compile groovy script')"
。知道如何使它工作或正确的语法是什么?
答案 0 :(得分:1)
一些建议。
重新索引并使created_unix_timestamp
成为elasticsearch中的真实日期。这将使各种新的查询成为可能(例如日期范围)。这将是理想的。
如果你不能重新索引,那么从ES中将它作为一个int拉回来,然后将其转换为你想要的任何客户端,我不建议将该工作推送到ES集群。
答案 1 :(得分:0)
根据上述评论中Szymon Stepniak的建议,我通过
解决了这个问题(new Date(1522705958L*1000).format('yyyyMM')).toInteger()
感谢和归功于Szymon Stepniak