通过子聚合结果值对术语聚合桶进行排序

时间:2015-10-08 15:31:07

标签: elasticsearch aggregate

我对此捕获中的查询有两个问题:

  1. 如何在结果的value字段中按sum_category订购? 我在查询中再次使用respsize,但它不正确,如下所示。

  2. 即使我只进行聚合,为什么所有文件都附带结果?我的意思是,如果我在SQL中进行group by查询,它只检索分组数据,但Elasticsearch检索所有文档,就好像我做了一个普通的搜索查询一样。我如何跳过它们?

  3. enter image description here

1 个答案:

答案 0 :(得分:1)

试试这个:

{
    "query" : {
        "match_all" : {}
    },
    "size" : 0,
    "aggs" : {
        "categories" : {
            "terms" : {
                "field" : "category",
                "size" : 999999,
                "order" : {
                    "sum_category" : "desc"
                }
            },
            "aggs" : {
                "sum_category" : {
                    "sum" : {
                        "field" : "respsize"
                    }
                }
            }
        }
    }
}

1)。请参阅(2)中的注释,了解sort正在做什么。至于按sum_category的值排序类别,请参阅order部分。似乎存在一个与https://github.com/elastic/elasticsearch/issues/4643相关的陈旧且封闭的问题,但对于我来说,它对Elasticsearch的v1.5.2很有用。

2)。虽然你没有那个match_all查询,但我认为这可能就是你得到的结果。因此,您指定的实际应用于这些结果的排序。为了得不到这些,我只有size: 0部分。

您想要所有类别的存储桶吗?我注意到你没有为主聚合指定大小。这是size: 999999部分。