如何在Elasticsearch中对date_histogram聚合的内部聚合进行排序?

时间:2016-03-16 18:35:15

标签: mysql elasticsearch

如何编写一个简单的Elasticsearch聚合查询来获得这个简单的MySQL查询的等价物:

SELECT
    `date`,
    `total`
FROM `table`
GROUP BY `date`
ORDER BY `total` DESC
LIMIT 10;

Elasticsearch中最直接的方法是:

{
    "size": 0,
    "aggregations": {
        "date_agg": {
            "date_histogram": {
                "field": "date",
                "interval": "day"
            },
            "aggregations": {
                "total_agg": {
                    "sum": {
                        "field": "total"
                    }
                }
            }
        }
    }
}

然而,这将产生一个巨大的索引的所有日子,这可能是无效的。此外,我必须手动手动查找前10个结果。

在Elasticsearch中完成所有这些操作的有效方法是什么?

1 个答案:

答案 0 :(得分:1)

使用以下查询,您就可以了:

{
"size": 0,
"aggregations": {
    "date_agg": {
        "date_histogram": {
            "field": "date",
            "interval": "day",
            "order" : {
                "total_agg" :"desc"   ====> Notice this
            }
        },
        "aggregations": {
            "total_agg": {
                "sum": {
                    "field": "total"
                }
            }
        }
     }
  } 
 }