在Elasticsearch扫描和滚动中,是否有一种方法可以控制批量大小并限制搜索中的文档数量



使用Elasticsearch扫描和滚动功能,是否可以控制返回的批次大小以及匹配数量的限制?

根据Elasticsearch扫描和滚动文档:

尽管我们指定了1000的size,但我们得到了更多的文档。扫描时,size应用于每个碎片,因此您将在每个批次中最多返回size * number_of_primary_shards个文档。

这似乎表明size参数在扫描和滚动中的使用方式不同,而在query-then-fetch类型(它限制了匹配次数)中使用的方式不同,并且没有可以指定的"单独旋钮"。

更新

这方面的一个用例是:

  • 我有很多索引(每个索引有2个碎片)。
    • 它们是按天组织的,有一些我无法改变的好理由
  • 有些查询会像"给我一天的一切,不需要订单"这样,这可能会导致很多结果(成千上万)。看起来查询大小应该是0(或者一些非常高的数字),以便用户在必要时最终浏览所有内容
  • 我希望第一页的结果能快速显示——第一页可以显示一个可变的数字,具体取决于UI设置(大约100秒)。似乎我应该能够控制这个,并在第一个滚动ID中获取这个大小

扫描和滚动似乎是一个不错的选择,但也许有更好的方法可以做到这一点?

size在扫描和滚动中的使用方式不同。它确实限制了每次滚动返回的文档数量,但您可以返回size * num_of_primary_shards

总的来说,你是正确的,但你可以使用限制过滤器(或2.0中的限制查询)来限制返回的点击量——这似乎有点奇怪,如果以这种方式限制它是所需的行为,我会确保扫描和滚动是最好的方法。