用于检索嵌套结构中最新日期的无痛脚本

Painless script to retrieve latest date in nested structure

我正在尝试修改此 以便我可以从嵌套结构中检索最大日期。

假设我有这样的映射:

   {
      "mappings": {
         "hello": { 
          "properties": {
             "field1": {"type" : "date", "format" : "yyyy-MM-dd HH:mm:ss"},
             "field2": {"type" : "date", "format" : "yyyy-MM-dd HH:mm:ss"}, 
             "test": { "type": "nested", 
                 "properties": {
                     "field3": {"type" : "date", "format" : "yyyy-MM-dd HH:mm:ss"},
                     "field4": {"type": "integer"},
                     "test2": { "type": "nested", 
                         "properties": {
                         "field5": {"type" : "date", "format" : "yyyy-MM-dd HH:mm:ss"}
                   }
                 }  
               }
             }
          }
       }
    }
}

我想做的是从 test.field3 检索最大日期

我尝试了一些方法,例如:

Date maxDate
for (int i = 0; i < params._source['test'].size(); i++) { 
    if (params._source['test'][i].field3 > score) {
        maxDate= params._source['test'][i].field3
    }
} return maxDate

任何帮助都将非常有帮助!我感觉我遇到了日期解析问题,但也许我错了。

如果有人在玩游戏,这里有一份文件:

{
    "field1" : "2018-01-02 10:00:00",
    "field2" : "2018-01-04 10:00:00", 
    "test": [ 
           {
           "field3": "2018-01-04 10:00:00",
           "field6": 1,
           "test2": [{
           "field4": "2018-01-04 10:00:00"
           }
           ]
       }
    ]
}

我会这样用 Java 8 条流

 params._source.test.stream()
     .mapToLong(f -> new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').parse(f.field3).getTime())
     .max()
     .getAsLong()