1

我正在尝试修改这个无痛脚本,以便可以从嵌套结构中检索 MAX 日期。

假装我有这样的映射:

   {
      "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 中检索 MAX 日期

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

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"
           }
           ]
       }
    ]
}
4

1 回答 1

2

我会用 Java 8 Streams 这样做

 params._source.test.stream()
     .mapToLong(f -> new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').parse(f.field3).getTime())
     .max()
     .getAsLong()
于 2018-04-18T03:55:23.503 回答