为什么这个ElasticSearch扫描和滚动总是返回相同的滚动id ?



所以首先我运行以下命令:

curl -s -XGET http://localhost:9200/my_index/_search?scroll=1m&search_type=scan&size=10

返回一个滚动id,然后在第一个滚动请求中使用:

curl -s -XGET http://localhost:9200/_search/scroll?scroll=1m&scroll_id=<scroll_id from above>

文档会让我相信,当我运行第二个curl请求时,我应该得到一个新的scroll id。

然而,看起来我一直得到相同的滚动id回来。

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

怎么回事?

以上内容是正确的。

scroll_id在后续的滚动请求中可能相同,也可能不相同。但是结果集(hits)在随后的滚动调用中肯定是不同的。

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

在大多数情况下scroll_id将保持不变,它可能会改变的时候,看看这个页面的结尾https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/search_operations.html在代码示例的注释中它说:

// When done, get the new scroll_id

// You must always refresh your _scroll_id! It can change sometimes

这意味着获得相同的滚动id为后续请求是好的,但不是强制性的。

最新更新