这个问题是this question的后续问题。
如果我的文件是这样的话:
{"documentid":1,
"documentStats":[ {"foo_1_1":1}, {"foo_2_1":5}, {"boo_1_1":3} ]
}
在script_field中使用的正确groovy脚本是什么,用于返回与特定模式匹配的每个文档的所有documentStats的总和(例如,包含_1_
)
答案 0 :(得分:1)
我不知道ES,但在纯粹的Groovy中你会这样做:
document.documentStats.collectMany { Map entry ->
// assumes each entry has a single key and a single int value
def item = entry.entrySet()[0]
item.key.contains('_1_') ? [item.value] : []
}.sum()
希望这有帮助。
答案 1 :(得分:1)
与提到的问题类似,有一个单行程与你的新结构做同样的事情:
{
"query" : {
...
},
"script_fields" : {
"sum" : {
"script" : "_source.documentStats.findAll{ it.keySet()[0] =~'_1_' }.collect{it.values()}.flatten().sum()"
}
}
}