小平面问题

时间:2012-07-07 12:57:56

标签: elasticsearch

我正在尝试使用ElasticSearch进行分析 - 专门用于跟踪手动滚动的Rails CMS的“顶级内容”。这个要求比为每个内容保留一个计数器要复杂得多。我现在不会深入研究问题的深度,因为我似乎无法使基础知识发挥作用。

我的问题是这样的:我正在使用方面而且计数并不是我所期望的。例如:

查询:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":1,"all_terms":false,"order":"count"}}}}

结果:

{"el_ids":{"_type":"terms","missing":0,"total":16672,"other":16657,"terms":[{"term":"quis","count":15}]}}

好的,很棒,ID为“quis”的内容有15次点击,而且ordercount,它应该是我最重要的内容。现在让我们获取前5个内容。

查询:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":5,"all_terms":false,"order":"count"}}}}

结果(只是方面):

[
  {"term":"qgz9","count":26},
  {"term":"quis","count":15},
  {"term":"hnqn","count":15},
  {"term":"higp","count":15},
  {"term":"csns","count":15}
]

咦?所以内容w / id“qgz9”的内容有26个更多?为什么不是第一个查询的最高结果?

好的,我们现在就获得前100名。

查询:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":100,"all_terms":false,"order":"count"}}}}

结果(只是方面):

[
  {"term":"qgz9","count":43},
  {"term":"difc","count":37},
  {"term":"zryp","count":31},
  {"term":"u65r","count":31},
  {"term":"sxsi","count":31},
  ...
]

所以现在“qgz9”有43次点击而不是26次点击?怎么可能?我可以向你保证,在后台修改索引时没有任何事情发生。如果我重复这些查询,我会得到相同的结果。

当我重复这个增加结果大小的过程时,计数会继续变化,并且新的内容ID会出现在顶部。有人可以向我解释我做错了什么,或者我对其工作原理的理解是有缺陷的吗?

1 个答案:

答案 0 :(得分:7)

事实证明这是known issue

  

...前N个方面现在的工作方式是从每个分片中获取前N个,然后合并结果。这可能会产生不准确的结果。

默认情况下,我的索引是使用5个分片创建的。通过更改此值,索引只有一个分片,计数符合我的预期。另一种解决方法是始终将size设置为大于预期方面数的值,并剥离前N个结果。