createdAt
的映射:
"createdAt": {
"type": "date"
},
我插入这样的日期:
POST logs/_doc/_bulk?pretty
{"index":{"_id":1}}
{"createdAt":"2018-05-01T07:30:00Z","value":"on"}
当我请求文件
时GET logs/_doc/_search
它显示我插入的日期:
"_source": {
"createdAt": "2018-05-01T07:30:00Z",
"value":"on"
}
现在我想将此日期与当前时间进行比较:
"map_script": {
long timestampLog = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S").parse(doc.createdAt.value).getTime();
long timestampNow = new Date().getTime();
if (timestampNow < timestampLog) {
// case 1
} else {
// case 2
}
}
奇怪:
doc.createdAt.value
会返回"2018-05-01T07:30:00.000Z"
,包含我从未添加的毫秒数。
解析时出现错误:
Cannot cast org.joda.time.MutableDateTime to java.lang.String
当我用字符串doc.createdAt.value
替换2018-05-01T07:30:00.000Z
时,它可以正常工作。
感谢任何帮助。非常感谢你!
答案 0 :(得分:0)
请移除S
中的大 formatter
,查看Date and Time Patterns
long timestampLog = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss").parse(doc.createdAt.value).getTime();
long timestampNow = new Date().getTime();
答案 1 :(得分:0)
日期类型的Elasticsearch索引字段轻松输入org.joda.time.DateTime
。使用SimpleDateFormat
是错误的根源。尝试以下方法:
long timestampLog = doc['createdAt'].value.getMillis();
long timestampNow = new Date().getTime();
其余的按原样工作。
在Elasticsearch 6.3.0上进行了测试。