Запрос ElasticSearch 150k занимает несколько минут - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь запросить примерно 150 тыс. Документов из ES.Мои 150 тыс. Документов занимают до 9,24 ГБ на диске, и я использую API прокрутки и получаю 10 000 за прокрутку.На его запрос уходит более 5 минут и возникают проблемы с памятью (требуется более 6 ГБ ОЗУ).Сейчас я попробовал несколько подходов:

_source: обычная фильтрация.Из 70 пар ключ-значение на документ мне нужно только 4 поля

 {
  "size": 10000,
  "query": {
    "range": {
      "updateTime": {
        "lte": 10000000000000000
      }
    }
  },
  "_source": [
    "id.identifierOne",
    "id.identifierTwo",
    "arrivalTime",
    "updateTime"
  ],
  "sort": [
    "_doc"
  ]
}

_stored_field: чтобы не тратить огромные накладные расходы на полный документ, я сохраняю 4 поля при создании индекса

{
  "size": 100000,
  "stored_fields": [
    "updateTime",
    "id.identifierOne",
    "id.identifierTwo",
    "arrivalTime"
  ],
  "query": {
    "range": {
      "updateTime": {
        "lte": 10000000000000000
      }
    }
  },
  "sort": [
    "_doc"
  ]
}

Оба работают в одинаковое время.Другая странная вещь, которую я заметил с версией _source, заключается в том, что каждая прокрутка на 10 000 приводит к увеличению времени запроса для следующего пакета и увеличению оперативной памяти.

Я сильно подозреваю, что в моей конфигурации или запросе произошла ошибка.Ожидание нескольких минут кажется слишком долгим.

Моя конфигурация: 5 шардов только на одном узле.Модуль масштабируется до 2CPU с 6 ГБ оперативной памяти.Создание индекса выполняется следующим образом

 {
      "mappings": {
        "doc": {
          "dynamic": "false",
          "properties": {
            "id.identifierOne": {
              "type": "long",
              "store": true
            },
            "id.identifierTwo": {
              "type": "text",
              "store": true
            },
            "arrivalTime": {
              "type": "long",
              "store": true
            },
            "updateTime": {
              "type": "long",
              "store": true
            }
          }
        },
  "settings" : {
    "index" : {
      "number_of_replicas" : 0
    }
  }
}

Есть ли возможность сократить время запроса до минуты?

Любая помощь или идеи высоко ценятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...