滚动API返回的滚动ID太长

问题描述

我正在尝试使用Scroll API从Kibana日志中提取10万条记录。认大小设置为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" : {
.....

由于滚动ID太长,我无法将其传递给Scroll API来获取下一批结果。我该如何解决?是因为分片数量大吗,有什么办法限制分片数量吗?

解决方法

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

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

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

有什么方法可以限制分片的数量吗?

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