当前位置: 首页 > 面试题库 >

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

锺离德运
2023-03-14
问题内容

我想计算构面查询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相同的行为。


问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: 从ElasticSearch获取某个索引的所有_id的最快方法是什么?使用简单的查询是否可能?我的索引之一包含大约20,000个文档。 问题答案: 编辑:请也阅读@Aleck Landgraf的答案 您只想要elasticsearch-internal 字段吗?还是文档中的字段? 对于前者,请尝试 Note 2017更新: 该帖子最初包含在内,但此后名称已更改,并且是新值。 结果将仅包

  • 问题内容: 我正在使用Hibernate检索特定查询的行数。假设我有一个名为“ Person”的表,其中包含各种列。这些列之一是“名称”。 如果我想获得带有“安德鲁”名字的人数,以下哪种方法最有效?假设某些/全部之间存在性能差异。使用Hibernate / SQL是否有更好的方法? (1)选择所有列 (2)仅选择名称列 (3)在查询中使用Count (4)在查询中的名称列中使用Count 编辑:对

  • 问题内容: 我正在寻找一种类似于R函数的高效方法来计算Python中列表的秩向量。在一个简单的列表与所述元件之间没有联系,元件 我 的列表的秩矢量的应该是 X 当且仅当是 X 个在排序的列表元素。到目前为止,这很简单,以下代码片段可以解决问题: 但是,如果原始列表具有联系(即,多个具有相同值的元素),事情就会变得复杂。在这种情况下,所有具有相同值的元素都应具有相同的等级,这是使用上述朴素方法获得的

  • 我试图找到最有效的方法来计算32位无符号整数的模255。我的主要关注点是找到一种在x86和ARM平台上运行良好的算法,并着眼于除此之外的适用性。首先,我试图避免内存操作(这可能很昂贵),因此我在避免表的同时寻找位细微的方法。我还试图避免潜在的昂贵操作,例如分支和乘法,并尽量减少使用的操作和寄存器的数量。 下面的ISO-C99代码捕获了我迄今为止尝试的八种变体。它包括一个用于穷举测试的框架。我附加了

  • 我正在寻找一种方法来计算步数: 我想我的问题有两方面: 我不明白C#和中的特殊 运算符 我不知道在哪里将某种变量输入到方法中。 一直在尝试通过微软的指南阅读 运算符的信息,但我仍然难以理解 内部发生了什么。 我的代码当前如下所示。这能正确吗? 很抱歉让人困惑。我将尝试缩小范围:如何将计数器放入? 我的任务的主要范围是对提供的fhcimolin方法进行全面测试,并将该方法与进行比较。一个小的附带任务

  • 假设我们有一个非常大的阶乘,如(10^7)!,有没有一种有效的方法来计算它的精确数字?(Wolfram alpha结果表示(10^7)!有657060位) 当然,我不能通过将值一个接一个地相乘来使用朴素的实现,因为它太慢了,无法评估结果。 我认为这个问题的解决方案最终可能是 如何在不计算阶乘的情况下找到阶乘的位数 如何更有效地计算阶乘(最好是BigInteger或BigDecimal) 我更喜欢1