Я запускаю агрегацию по 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].
- Есть ли лучший способ написать этот запрос?
- Как мне справиться с этим исключением?
- Я запускаю java задание, которое запрашивает ES каждые 10 минут, я заметил, что это происходит часто во второй раз, мне нужно освободить какие-либо ресурсы или что-то в этом роде? Я использую restHighLevelClient.searchAsyn c () со слушателем, который снова вызывает со следующим ключом, пока я не получу значение null.
В кластере 3 узла по 32 ГБ каждый.
I пытается поиграть с размером ведра, это не помогло.
Спасибо!