为什么此ElasticSearch扫描并滚动保持返回相同的滚动ID?

ale*_*ato 22 elasticsearch

首先,我运行以下内容:

curl -s -XGET http://localhost:9200/my_index/_search?scroll=1m&search_type=scan&size=10
Run Code Online (Sandbox Code Playgroud)

这将返回一个滚动ID,然后我在第一个滚动请求中使用它:

curl -s -XGET http://localhost:9200/_search/scroll?scroll=1m&scroll_id=<scroll_id from above>
Run Code Online (Sandbox Code Playgroud)

文档会让我相信当我运行第二个curl请求时,我应该得到一个新的滚动ID.

但是,看起来我继续获得相同的滚动ID.

看起来每个请求返回的数据都不同,所以我假设一切正常.

到底是怎么回事?

kee*_*ety 18

你上面的内容是正确的.

在后续滚动请求中,scroll_id可以相同或不同.但结果集(命中)在后续滚动调用中明显不同.

scroll_id可能会在多个调用过程中发生变化,因此需要始终将最新的scroll_id作为后续请求的scroll_id传递.

  • 我也对这种行为感到困惑.不返回不同的scroll_id使得无法支持重试失败.我觉得id应该总是改变,如果你使用相同的滚动ID调用两次,你应该得到相同的页面,因为它被认为是重试失败的调用. (4认同)
  • 我这边也有同样的问题......相同的滚动 ID 一直出现,我可以在进行分页时在所有页面上看到相同的结果......有什么方法可以在所有页面上获得正确和不同的结果。 (2认同)