小编典典

在Elastic Search中计算* Facet Count *的有效方法

elasticsearch

我想计算构面查询UI的构面计数,但是我想我缺少一些东西,因为无法使用构面过滤器获取所需的数字。

这是一个例子。给定两个方面,每个方面都有三个可能的术语:

Colors: {red, yellow, blue}
Notes: {do, re, mi}

当我进行搜索时,一个方面中每个字词的计数都没有考虑另一个方面中设置的过滤条件。

为了显示:

[ ] All colors (18)
 [x] Red (10)
 [ ] Green (5)
 [ ] Blue (3)

[ ] All notes (18)
 [ ] Do (5)
 [x] Re (7)
 [ ] Mi (6)

请注意,每个方面内的总数等于查询的命中总数,就好像未设置过滤器一样。

我想要的行为是“注释”构面中的数字考虑到“颜色”构面中的过滤器,反之亦然。也就是说,音符项的数字总和应为10(以匹配红色过滤器),而不是18。

有趣的是,文档中的示例屏幕截图使用了Linked In中的示例,该示例实际上演示了我想要的行为。

http://www.elasticsearch.org/guide/reference/api/search/facets/

我可以通过为每个方面(ugh)中的每个术语手动重新提交一次查询来获得所需的结果,但是我想知道是否有一种方法可以通过更改查询来立即获得与LinkedIn相同的行为。


阅读 306

收藏
2020-06-22

共1个答案

小编典典

我发现这可行的唯一方法是通过以下针对任何多选方面的逻辑:

每当用户从构面中选择一个值(“向下钻取”)时,您都将向其(选择面所在的构面 除外 )的所有构面以及用于过滤查询的顶级 过滤器
添加相应的过滤器结果。

换句话说,给定3个选择面A,B和C:

  • 从A =>中选择值将过滤器添加到顶级 过滤器 以及B和C 的 facet_filter
  • 从B =>中选择值将过滤器添加到顶级 过滤器 以及A和C 的 facet_filter
  • … 等等

顶级过滤器始终将所有选择的过滤器组合在一起,而每个单独的构面都根据 其他 构面中的选择包含facet_filters 。

2020-06-22