【发布时间】:2014-09-21 18:41:14
【问题描述】:
假设我有以下数据:
car1: { color: blue, brand: mercedes }
car2: { color: blue, brand: toyota }
car3 { color: red, brand: mercedes }
car4: { color: red, brand: toyota }
car5: { color: green,brand: toyota }
“颜色”的聚合给了我{ blue: 2, red: 2, green: 1}
“品牌”的聚合给了我{ mercedes: 2, toyota: 3 }
到目前为止还不错。
如果我搜索“color = blue”并在过滤后进行聚合,我最终会得到:
聚合“颜色”给我{ blue: 2 } // 仅适用于蓝色汽车
聚合“品牌”给我{ mercedes: 1, toyota: 1 } // 仅适用于蓝色汽车
在我的搜索中,我可能会为每个属性选择多个方面,因此搜索“蓝色”或“红色”或“绿色”汽车会得到所有记录。
所以我想在过滤相应属性之前获取每个聚合值,但在其他属性之后,所以我也可以看到其他数量。
此处不适用后置过滤器(循环引用)。
我真的必须触发多个查询(针对主查询和每个聚合)吗?
或者我是否必须在后过滤之前使用所有聚合并将除对应的所有过滤器再次放入每个聚合中(filter-aggr.)?
任何帮助表示赞赏!
[A]
没有过滤器
Color:
( ) blue: 2
( ) red: 2
( ) green: 1
Brand:
( ) toyota: 3
( ) mercedes: 2
[B]
过滤器:颜色=蓝色
Color:
(x) blue: 2
Brand:
( ) toyota: 1
( ) mercedes: 1
[C]
过滤器:颜色=蓝色
Color:
(x) blue: 2
( ) red: 2
( ) green: 1
Brand:
( ) toyota: 1
( ) mercedes: 1
【问题讨论】:
-
无论用户搜索什么,您的目标是保持聚合或方面的全球性吗(上面的示例 C)?或者让您的聚合按用户选择的方面进行过滤(上面的示例 B)?
-
不完全是全局的 .. 过滤通常会影响 facet-values。但是过滤不应该影响每个过滤属性本身的方面。过滤颜色应该会影响品牌价值,但不会影响颜色价值 - 反之亦然。
标签: elasticsearch filter aggregation facets