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

时间:2014-08-22 19:00:39

标签: elasticsearch

首先,我运行以下内容:

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>

The documentation会让我相信当我运行第二个卷曲请求时,我应该得到一个新的滚动ID。

然而,看起来我不断获得相同的滚动ID。

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

发生了什么事?

2 个答案:

答案 0 :(得分:18)

上面的内容是正确的。

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

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

答案 1 :(得分:0)

在大多数情况下,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很好,但不是强制性的。