Elasticsearch занимает минуту для ответа на запрос агрегации - PullRequest
0 голосов
/ 01 октября 2019
Document count: 4 Billion
disc size : 2 TB
Primary: 5 
replica: 2
master node : 3
data node: 4 * [16cpu and 64GB ram]
heap size: 30GB
mlock enable : true

Для ответа на запросы агрегации требуется до 3 минут. По последующему запросу он кэширует и ускоряет работу. Есть ли способ ускорить агрегирование по первому запросу?

Пример запроса агрегации:

{
  "query": {
    "bool": {
      "must": [],
      "must_not": [],
      "should": []
    }
  },
  "size": 0,
  "aggs": {
    "agg_;COUNT_ROWS;5d8b0621690e727ff775d4ed": {
      "terms": {
        "field": "feild1.keyword",
        "size": 10000,
        "shard_size": 100,
        "order": {
          "_term": "asc"
        }
      },
      "aggs": {
        "agg_;COUNT_ROWS;5d8b0621690e727ff775d4ec": {
          "terms": {
            "field": "feild2.keyword",
            "size": 30,
            "shard_size": 100,
            "order": {
              "_term": "asc"
            }
          },
          "aggs": {
            "agg_HouseHold;COUNT_DISTINCT": {
              "cardinality": {
                "field": "feild3.keyword",
                "precision_threshold": 40000
              }
            }
          }
        }
      }
    }
  }
}

1 Ответ

1 голос
/ 01 октября 2019

Если я правильно понимаю, вы выполняете запрос для одного экземпляра, всего 15 осколков, 5 из которых являются основными. Первое агрегирование terms имеет размер 10000. это большое число, которое влияет на производительность. рассмотрите возможность перехода к композитная агрегация , чтобы использовать нумерацию страниц, а не пытаться сжать ее до огромного отклика.

Кроме того, shard_size не имеет особого смысла для меня, поскольку вы запрашиваете только 5 шардов и запрашиваете 10 000 результатов - получение 100 результатов из 5 шардов даст 500 результатов, что недостаточно. Я бы исключил этот параметр shard_size или установил бы более высокое значение, чтобы оно имело смысл.

...