Улучшение запроса ES Agg - получение circuit_breaking_exception - PullRequest
1 голос
/ 06 августа 2020

Я запускаю агрегацию по 2 индексам: idx-2020-07-21, idx-2020-07-22. Цель: получить все документы, но в случае повторяющегося идентификатора (50% - это ), получите индекс из последнего индекса, используя имя индекса.

Это тот запрос, который я выполняю

{
  "size": 0,
  "aggregations": {
    "latest_item": {
      "composite": {
        "size": 1000,
        "sources": [
          {
            "product": {
              "terms": {
                "field": "_id",
                "missing_bucket": false,
                "order": "asc"
              }
            }
          }
        ]
      },
      "aggregations": {
        "max_date": {
          "top_hits": {
            "from": 0,
            "size": 1,
            "version": false,
            "explain": false,
            "sort": [
              {
                "_index": {
                  "order": "desc"
                }
              }
            ]
          }
        }
      }
    }
  }
}

Размер каждого индекса составляет 8 ГБ с ~ 1 млн документов. ES версии 7.5

, и для агрегирования требуется около 8 минут, в большинстве случаев я получаю

{"error":{"root_cause":[{"type":"circuit_breaking_exception","reason":"[parent] Data too large, data for [<http_request>] would be [32933676058/30.6gb], which is larger than the limit of [32641751449/30.3gb].
  1. Есть ли лучший способ написать этот запрос?
  2. Как мне справиться с этим исключением?
  3. Я запускаю java задание, которое запрашивает ES каждые 10 минут, я заметил, что это происходит часто во второй раз, мне нужно освободить какие-либо ресурсы или что-то в этом роде? Я использую restHighLevelClient.searchAsyn c () со слушателем, который снова вызывает со следующим ключом, пока я не получу значение null.

В кластере 3 узла по 32 ГБ каждый.

I пытается поиграть с размером ведра, это не помогло.

Спасибо!

...