使用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中的限制查询)来限制返回的点击量——这似乎有点奇怪,如果以这种方式限制它是所需的行为,我会确保扫描和滚动是最好的方法。