当前版本7.2.0
由于有些场景需要根据条记录的两个时间来判断,得出另一个属性,所以就需要比较大小
场景:需要判断工单是否超时,已取消的工单,就需要根据取消时间 cancelTime 和超时时间 expireTime 比较,若 cancelTime 小于 expireTime,判定为正常,否则判定为超时
Cannot apply [>] operation to types [org.elasticsearch.script.JodaCompatibleZonedDateTime] and [org.elasticsearch.script.JodaCompatibleZonedDateTime].
最开始的版本是支持这样比较的,但是6.1版本就移除了这个功能,所以要改用别的方法
Comparison (<) not supported on datetime fields anymore since upgrade to 6.1
然后只能查找其他方法,我也不记得是哪里找到的,好像是翻墙吧,现在再找找不到了,官方文档也没有翻到
doc['cancelTime'].value.toInstant().toEpochMilli()A document doesn't have a value for a field! Use doc[<field>].size()==0 to check if a document is missing a field!
所以脚本还需要加上判空操作,终于查询成功
GET order_index_dev/_search { "query": { "bool": { "must": [ { "term": { "status": 5 } }, { "script": { "script": "if (doc['expireTime'].size()==0 || doc['cancelTime'].size()==0) {return false} else {return doc['cancelTime'].value.toInstant().toEpochMilli() > doc['expireTime'].value.toInstant().toEpochMilli()}" } } ] } } }