Elasticsearch脚本 - 将unix时间戳转换为“YYYYMM”

时间:2018-04-02 21:21:59

标签: elasticsearch groovy elasticsearch-2.0

我使用的是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')"。知道如何使它工作或正确的语法是什么?

2 个答案:

答案 0 :(得分:1)

一些建议。

  1. 重新索引并使created_unix_timestamp成为elasticsearch中的真实日期。这将使各种新的查询成为可能(例如日期范围)。这将是理想的。

  2. 如果你不能重新索引,那么从ES中将它作为一个int拉回来,然后将其转换为你想要的任何客户端,我不建议将该工作推送到ES集群。

答案 1 :(得分:0)

根据上述评论中Szymon Stepniak的建议,我通过

解决了这个问题
(new Date(1522705958L*1000).format('yyyyMM')).toInteger()

感谢和归功于Szymon Stepniak