如何编写一个简单的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中完成所有这些操作的有效方法是什么?
答案 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"
}
}
}
}
}
}