【发布时间】:2018-06-15 15:10:45
【问题描述】:
我有一个产品列表(deal 实体),我正在尝试按类别创建存储桶聚合,按 available_stock 的总和排序。
这一切都很好,但我想从结果聚合中排除那些没有将 level 设置为 1 的类别(换句话说,我只想保留 level IS 1 的类别的聚合) .
我知道 elasticsearch 提供“排除”和“包含”参数,但这些仅适用于我正在聚合的同一字段(在本例中为 deal.category.id)
这是我的示例deal 文档:
{
"_source": {
"id": 392745,
"category": [
{
"id": 17575,
"level": 2
},
{
"id": 17574,
"level": 1
},
{
"id": 17572,
"level": 0
}
],
"stats": {
"available_stock": 500
}
}
}
这将是查询:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
}
},
"aggs": {
"mainAggregation": {
"terms": {
"field": "deal.category.id",
"order": {
"available_stock": "desc"
},
"size": 3
},
"aggs": {
"available_stock": {
"sum": {
"field": "deal.stats.available_stock"
}
}
}
}
},
"size": 0
}
还有我生成的聚合,遗憾的是包含级别为 0 的类别 17572。
{
"aggregations": {
"mainAggregation": {
"buckets": [
{
"key": 17572,
"doc_count": 30,
"available_stock": {
"value": 24000
}
},
{
"key": 17598,
"doc_count": 10,
"available_stock": {
"value": 12000
}
},
{
"key": 17602,
"doc_count": 8,
"available_stock": {
"value": 6000
}
}
]
}
}
}
P.S.:目前在 ElasticSearch 1.6 上
更新 1:在对子聚合的各种组合进行各种实验后,问题仍然存在。
【问题讨论】:
标签: elasticsearch elasticsearch-aggregation