Scripted Metric Aggregation
使用脚本执行以提供度量标准输出的度量标准聚合。
Example: POST ledger/_search?size=0
POST ledger/_search?size=0
{
"query" : {
"match_all" : {}
},
"aggs": {
"profit": {
"scripted_metric": {
"init_script" : "state.transactions = []", #@1
"map_script" : "state.transactions.add(doc.type.value == 'sale' ? doc.amount.value : -1 * doc.amount.value)",
"combine_script" : "double profit = 0; for (t in state.transactions) { profit += t } return profit",
"reduce_script" : "double profit = 0; for (a in states) { profit += a } return profit"
}
}
}
}
@1: init_script是可选参数,所有其他脚本都是必需的。
上述聚合演示了如何使用脚本聚合计算销售和成本事务的总利润。
上述聚合的响应:
{
"took": 218,
...
"aggregations": {
"profit": {
"value": 240.0
}
}
}
上面的示例也可以使用存储的脚本指定,如下所示:
POST ledger/_search?size=0
{
"aggs": {
"profit": {
"scripted_metric": {
"init_script" : {
"id": "my_init_script"
},
"map_script" : {
"id": "my_map_script"
},
"combine_script" : {
"id": "my_combine_script"
},
"params": {
"field": "amount" #@1
},
"reduce_script" : {
"id": "my_reduce_script"
}
}
}
}
}
@1: 必须在全局params对象中指定init,map和combine脚本的脚本参数,以便可以在脚本之间共享它。
有关指定脚本的详细信息,请参阅脚本文档。
未完…