【发布时间】:2018-11-06 23:59:54
【问题描述】:
我的 ElasticSearch 中有两个字段的文档。我想在这些组合上构建一个聚合,有点像 SQL GROUP BY field_A, field_B 并为每个现有组合获取一行。我到处都读到我应该为此使用子聚合。
{
"aggs": {
"sales_by_article": {
"terms": {
"field": "catalogs.article_grouping",
"size": 1000000,
"order": {
"total_amount": "desc"
}
},
"aggs": {
"total_amount": {
"sum": {
"script": "Math.round(doc['amount.value'].value*100)/100.0"
}
},
"sales_by_submodel": {
"terms": {
"field": "catalogs.submodel_grouping",
"size": 1000,
"order": {
"total_amount": "desc"
}
},
"aggs": {
"total_amount": {
"sum": {
"script": "Math.round(doc['amount.value'].value*100)/100.0"
}
}
}
}
}
}
},
"size": 0
}
得到以下简化结果:
{
"aggregations": {
"sales_by_article": {
"buckets": [
{
"key": "19114",
"total_amount": {
"value": 426794.25
},
"sales_by_submodel": {
"buckets": [
{
"key": "12",
"total_amount": {
"value": 51512.200000000004
}
},
...
]
}
},
...
]
}
}
}
但是,问题在于排序不是我想要的。在这种特殊情况下,它首先根据每篇文章的总金额对文章进行排序,然后在一篇文章中根据每个子模型的总金额对子模型进行排序。但是,我想要实现的是只有最深的级别,并获得文章和子模型组合的聚合,按此组合的 total_amount 排序。这是我想要的结果:
{
"aggregations": {
"sales_by_article_and_submodel": {
"buckets": [
{
"key": "1911412",
"total_amount": {
"value": 51512.200000000004
}
},
...
]
}
}
}
【问题讨论】:
标签: elasticsearch