Scroll API 返回的 Scroll id 太长

Scroll id returned by Scroll API is too long

我正在尝试使用 Scroll API 从 Kibana 日志中获取 100K 条记录。默认大小设置为 500,我无权更改它。我尝试使用以下命令滚动:

curl -XPOST "http://elasticsearch.us-central1.gcp.cloud.internal/shared/_search?scroll=1m&size=500&pretty" -H "Content-Type: application/json"  -d '{
  "_source": ["message"],  
  "query": {
    "match_phrase": {
      "kubernetes.container_name": {
        "query": "my-container-name"
      }
    }
  }
}'

输出看起来像这样:

{
  "scroll_id": DnF1ZXJ5VGhlbkZldGNo5TkAA.... //300,000 characters long
  "took" : 16626,
  "timed_out" : false,
  "_shards" : {
    "total" : 7397,
    "successful" : 7397,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
.....

由于scroll id太长,我无法将它传递给Scroll API来获取下一批结果。我该如何解决这个问题?这是因为分片数量多吗?有什么办法可以限制分片数量吗?

根据 discussion on ES Community,scroll_id 的长度与索引中的分片数量之间似乎存在直接关系。

建议在请求Body中传递scroll_id。例如:

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==" 
}

is there any way to limit the number of shards?

  1. 您可以创建一个分片数量较少的新索引
  2. 然后使用 ReIndex API
  3. 将数据重新索引到新索引
  4. 无法减少现有索引的分片数量。