目前,我正在尝试根据一个字段对一个字段进行分组,而不是根据用于分组的相应字段获取其他字段的总和。我想获得一个新值,该值需要除以求和字段。我将提供我当前的查询:
在我的查询中,我根据字段(“a_name”)聚合它们并对“支出”和“ yield ”求和。我想要一个新字段,它是总和(支出/ yield )的比率
我尝试添加脚本,但我得到 NaN ,也是为了启用此功能;我必须首先在 elasticsearch.yml 文件中启用它们
script.engine.groovy.inline.aggs:打开
查询
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”和“gained”
谢谢!
最佳答案
您的某些文档中的 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"
}
}
}
}
}
关于groovy - Elasticsearch中两个字段的划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31814402/