Идентификатор прокрутки, возвращаемый Scroll API, слишком длинный

#elasticsearch #elastic-stack

#elasticsearch #эластичный стек

Вопрос:

Я пытаюсь использовать Scroll API для извлечения 100 тысяч записей из журналов Kibana. Размер по умолчанию установлен на 500, и у меня нет разрешения на его изменение. Я попытался прокрутить с помощью приведенной ниже команды:

 curl -XPOST "http://elasticsearch.us-central1.gcp.cloud.internal/shared/_search?scroll=1mamp;size=500amp;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 API для получения следующего пакета результатов. Как я могу это решить? Связано ли это с большим количеством сегментов и есть ли какой-либо способ ограничить количество сегментов?

Ответ №1:

Основываясь на обсуждении в сообществе ES, похоже, существует прямая связь между длиной scroll_id и количеством сегментов в индексе.

Рекомендуется передавать scroll_id в теле запроса. Например:

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

есть ли какой-либо способ ограничить количество сегментов?

  1. Вы можете создать новый индекс с меньшим количеством сегментов
  2. Затем переиндексируйте данные в новый индекс, используя ReIndex API
  3. Нет способа уменьшить количество сегментов существующего индекса.

Комментарии:

1. Не могли бы вы принять это в качестве ответа тогда.

2. Я поддержал его. Как вы «принимаете это как ответ»?

3. Не хочу показаться бесполезным, но я не вижу «галочки», на которую можно нажать, чтобы отметить это как ответ. Я бы поделился скриншотом здесь, но, похоже, это не вариант.

4. @BruceMacKenzie только тот, кто задал вопрос, увидит эту галочку