我有两个层次的文档类型层次结构。这些文档通过父子关系进行关联,如下所示:category > sub_category > item,即每个sub_category都有一个_parent
引用类别ID的字段,而每个item都有一个_parent
引用sub_category id的字段。
每个项目都有一个price
字段。给定一个类别查询,其中包括子类别和项目的条件,我想计算每个sub_category的总价。
我的查询看起来像这样:
{
"query": {
"has_child": {
"child_type": "sub_category",
"query": {
"has_child": {
"child_type": "item",
"query": {
"range": {
"price": {
"gte": 100,
"lte": 150
}
}
}
}
}
}
}
}
我计算每个子类别价格的汇总如下所示:
{
"aggs": {
"categories": {
"terms": {
"field": "id"
},
"aggs": {
"sub_categories": {
"children": {
"type": "sub_category"
},
"aggs": {
"sub_category_ids": {
"terms": {
"field": "id"
},
"aggs": {
"items": {
"children": {
"type": "item"
},
"aggs": {
"price": {
"sum": {
"field": "price"
}
}
}
}
}
}
}
}
}
}
}
}
尽管查询响应列出了匹配结果,但聚合响应不匹配任何项目:
{
"aggregations": {
"categories": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "category1",
"doc_count": 1,
"sub_categories": {
"doc_count": 3,
"sub_category_ids": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "subcat1",
"doc_count": 1,
"items": {
"doc_count": 0,
"price": {
"value": 0
}
}
},
{
"key": "subcat2",
"doc_count": 1,
"items": {
"doc_count": 0,
"price": {
"value": 0
}
}
},
{
"key": "subcat3",
"doc_count": 1,
"items": {
"doc_count": 0,
"price": {
"value": 0
}
}
}
]
}
}
}]
}
}
}
但是,省略sub_category_ids
汇总确实会导致项目出现,并且价格会在汇总级别进行categories
汇总。我希望包括sub_category_ids
汇总在内仅更改价格总和的水平。
我是否误解了汇总的评估方式,如果是这样,我如何修改它以显示每个子类别的汇总价格?
我打开了一个问题#15413,children aggregation
因为我和其他人都面临着类似的问题ES 2.0
显然,根据ES开发人员@martijnvg的问题是
子级agg做出一个假设(子级agg正在查看所有段)在1.x中是正确的,但在2.x中不是。
PR#15457再次从@martijnvg修复了此问题
在我们仅评估在父级汇总中产生匹配项的细分之前,这导致我们错过了在没有父级匹配项的细分中评估子文档的机会。
解决此问题的方法是,不再记得我们匹配的细分市场,而只需评估所有细分市场即可。这使代码更简单,我们仍然可以快速查看段是否不像以前那样保存子文档。
此拉取请求已合并,并且也已回移植到2.x, 2.1 and 2.0 branches
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句