用于检索嵌套结构中最新日期的无痛脚本
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()
我正在尝试修改此
假设我有这样的映射:
{
"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()