目前我正在尝试基于一个字段对字段进行分组,而不是根据用于分组的相应字段获取其他字段的总和。我想得到一个新的值,需要划分求和字段。我将提供我当前的查询:
在我的查询中,我根据字段(" a_name")汇总它们并汇总"花费"并且"获得"。我想获得一个新的领域,即总和(支出/收益)的比率
我尝试添加脚本但是我正在获取NaN,也是为了启用它;我必须先在elasticsearch.yml文件中启用它们
script.engine.groovy.inline.aggs:on
查询
GET /index1/table1/_search
{
"size": 0,
"query": {
"filtered": {
"query": {
"query_string": {
"query": "*",
"analyze_wildcard": true
}
},
"filter": {
"bool": {
"must": [
{
"term": {
"account_id": 29
}
}
],
"must_not": []
}
}
}
},
"aggs": {
"custom_name": {
"terms": {
"field": "a_name"
},
"aggs": {
"spe": {
"sum": {
"field": "spend"
}
},
"gained": {
"sum": {
"field": "gain"
}
},
"rati": {
"sum": {
"script": "doc['spend'].value/doc['gain'].value"
}
}
}
}
}
}
此特定查询向我显示了“NaN'在输出中。如果我将除法替换为乘法,则查询可以正常工作。
基本上我正在寻找的是分割我的两个聚合器" spe"和"获得"
谢谢!
答案 0 :(得分:4)
某些文档中doc.gain
可能为0。您可以尝试将脚本更改为:
"script": "doc['gain'].value != 0 ? doc['spend'].value / doc['gain'].value : 0"
<强>更新强>
如果要计算两个其他度量标准聚合的结果的比率,可以使用bucket_script
聚合(仅适用于ES 2.0)。
{
...
"aggs": {
"custom_name": {
"terms": {
"field": "a_name"
},
"aggs": {
"spe": {
"sum": {
"field": "spend"
}
},
"gained": {
"sum": {
"field": "gain"
}
},
"bucket_script": {
"buckets_paths": {
"totalSpent": "spe",
"totalGained": "gained"
},
"script": "totalSpent / totalGained"
}
}
}
}
}