我试图通过应用另一个进行求和的聚合来对聚合结果进行排序,然后通过降序到该总和来应用顺序。
如果我尝试如下,聚合结果按doc count排序。
"order": {
"revrsenestedowners": "desc"
}
下面的代码解释了我面临的问题。 (字段名称只是为了说明问题而改变)
“machines”是我的嵌套对象,但“所有者”不是嵌套的,它属于父对象。
我需要按所有者机器计数获得前10名机器名称(需要总和,因为所有者对象是列表,并且可以有多个值)。
{
"query": {
"range": {
"createdDate": {
"gte": "2015-04-28T00:00:00",
"lte": "2015-05-01T23:59:59"
}
}
},
"aggs": {
"nestedagg": {
"nested": {
"path": "machines"
},
"aggs": {
"terms": {
"terms": {
"field": "machines.machineName",
"size": 10,
"order": {
"sumowners": "desc"
}
},
"aggs": {
"revrsenestedowners": {
"reverse_nested": {},
"aggs": {
"sumowners": {
"sum": {
"field": "owners.machinesCount"
}
}
}
}
}
}
}
}
}
}
我需要总和排序而不是doc count排序。 为了它的工作我可能需要像:
"order": {
"revrsenestedowners.sumowners": "desc"
}
有没有办法实现我正在寻找的东西。
或者这是弹性搜索的限制吗?还是一个bug?
我被困住了,非常感谢任何帮助
答案 0 :(得分:0)
我在弹性搜索论坛上提出了同样的问题,他们用正确的语法回复了
https://github.com/elastic/elasticsearch/issues/11059
答案是:
"order": {
"revrsenestedowners > sumowners.value" : "desc"
}
希望它对其他人有帮助,