在弹性搜索中计算*Facet Counts*的有效方法

Kev*_*nce 3 faceted-search elasticsearch

我想为facet查询UI计算facet计数,但我想我错过了一些东西,因为我无法使用facet过滤器得到我需要的数字.

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

Colors: {red, yellow, blue}
Notes: {do, re, mi}
Run Code Online (Sandbox Code Playgroud)

当我进行搜索时,构面中每个术语的计数不会考虑另一个方面中设置的过滤器.

为了显示:

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

[ ] All notes (18)
 [ ] Do (5)
 [x] Re (7)
 [ ] Mi (6)
Run Code Online (Sandbox Code Playgroud)

请注意,每个方面内的总计总和为查询的总命中数,就像没有设置过滤器一样.

我想要的行为是让Notes facet中的数字考虑到Colors facet中的过滤器,反之亦然.也就是说,注释术语的数字应该总和为10(以匹配红色滤波器),而不是18.

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

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

我能够通过为每个方面的每个术语手动重新提交一次查询来获得我想要的结果(呃)但是我想知道是否有办法通过更改我的查询获得与开箱即用的开箱即用相同的行为.

rom*_*anb 7

我发现这个工作的唯一方法是通过以下任何多选方面的逻辑:

每当用户从构面中选择一个值("向下钻取")时,您将向所有构面添加相应的过滤器(通过facet_filter),除了完成选择的构面,以及顶级过滤器以过滤查询结果.

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

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

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