0

我正在phrase_prefix搜索“工程师”,并且在“技能”领域方面获得了 36 个术语“工程”。接下来我申请一个term filter在该构面字段上为“工程”应用一个,现在在新的过滤结果中,构面中“工程”的计数为 42。

过滤后的查询返回 42 个结果,每个结果都与方面匹配,也就是说,它们都包含“工程”作为技能。

所以我希望未过滤的查询在“技能”方面的“工程”术语有 42 个计数,但正如我上面提到的,它只有 36 个。

这是映射和查询 https://gist.github.com/santiago/a249418e5bf7531ead85

我在这里缺少什么?

谢谢

PD。我正在使用 0.90.5

4

1 回答 1

0

在 0.90.5 中,您可以通过增加构面列表的大小来获得您期望的结果:

  "facets": {
    "skills": {
      "terms": {
        "field": "skills",
        "size": 50
      }
    },

您得到不准确结果的原因,以及为什么增加大小有帮助的原因在Elasticsearch 文档中关于 term facets的解释:

size 参数定义了应该从整个术语列表中返回多少个顶级术语。默认情况下,协调搜索过程的节点将要求每个分片提供其自己的最大尺寸项,一旦所有分片都响应,它会将结果缩减为最终列表,然后将其发送回客户端。这意味着,如果唯一术语的数量大于大小,则返回的列表会稍微偏离且不准确(可能是术语计数略有偏离,甚至可能是本应处于最大大小的术语条目未返回)。

在 0.9.6+ 中,您可以shard_size向 facet 添加一个参数,告诉它从每个分片请求多少个术语,然后将结果组合到一个列表中。

于 2014-01-13T04:56:04.257 回答