Эластичный поиск по многим агрегатам: невозможно подключиться к серверу
Когда у меня в Elastic Search 5.2.0 более 64 агрегатов, происходит сбой:
{
"ok": false,
"message": "Unable to connect to the server."
}
Эта проблема связана с Elastic Cloud - я провел тестирование на локальном экземпляре Elastic, и у него нет этого ограничения.
Это ожидаемое поведение?
Я пытался удалить разные агрегаты, но все сводится к количеству агрегатов. Он отлично работает с 65 или менее агрегатами.
Это простые агрегаты вроде следующего:
"aggs": {
"wheelSize": {
"filter": { ... },
"aggs": {
"facet_terms": {
"terms": {
"field": "facets.wheelSize",
"size": 1000
}
}
}
},
"tireSize": {
"filter": { ... },
"aggs": {
"facet_terms": {
"terms": {
"field": "facets.tireSize",
"size": 1000
}
}
}
}
}
Редактировать:
Код для тиражирования:
Создать индекс:
PUT product_test
{
"mappings": {
"product": {
"properties": {
"prop1": {
"type": "long"
},
"prop2": {
"type": "long"
},
"prop3": {
"type": "long"
},
"prop4": {
"type": "long"
},
"prop5": {
"type": "long"
},
"prop6": {
"type": "long"
},
"prop7": {
"type": "long"
},
"prop8": {
"type": "long"
},
"prop9": {
"type": "long"
},
"prop10": {
"type": "long"
},
"prop11": {
"type": "long"
},
"prop12": {
"type": "long"
},
"prop13": {
"type": "long"
},
"prop14": {
"type": "long"
},
"prop15": {
"type": "long"
},
"prop16": {
"type": "long"
},
"prop17": {
"type": "long"
},
"prop18": {
"type": "long"
},
"prop19": {
"type": "long"
},
"prop20": {
"type": "long"
},
"prop21": {
"type": "long"
},
"prop22": {
"type": "long"
},
"prop23": {
"type": "long"
},
"prop24": {
"type": "long"
},
"prop25": {
"type": "long"
},
"prop26": {
"type": "long"
},
"prop27": {
"type": "long"
},
"prop28": {
"type": "long"
},
"prop29": {
"type": "long"
},
"prop30": {
"type": "long"
},
"prop31": {
"type": "long"
},
"prop32": {
"type": "long"
},
"prop33": {
"type": "long"
},
"prop34": {
"type": "long"
},
"prop35": {
"type": "long"
},
"prop36": {
"type": "long"
},
"prop37": {
"type": "long"
},
"prop38": {
"type": "long"
},
"prop39": {
"type": "long"
},
"prop40": {
"type": "long"
},
"prop41": {
"type": "long"
},
"prop42": {
"type": "long"
},
"prop43": {
"type": "long"
},
"prop44": {
"type": "long"
},
"prop45": {
"type": "long"
},
"prop46": {
"type": "long"
},
"prop47": {
"type": "long"
},
"prop48": {
"type": "long"
},
"prop49": {
"type": "long"
},
"prop50": {
"type": "long"
},
"prop51": {
"type": "long"
},
"prop52": {
"type": "long"
},
"prop53": {
"type": "long"
},
"prop54": {
"type": "long"
},
"prop55": {
"type": "long"
},
"prop56": {
"type": "long"
},
"prop57": {
"type": "long"
},
"prop58": {
"type": "long"
},
"prop59": {
"type": "long"
},
"prop60": {
"type": "long"
},
"prop61": {
"type": "long"
},
"prop62": {
"type": "long"
},
"prop63": {
"type": "long"
},
"prop64": {
"type": "long"
},
"prop65": {
"type": "long"
},
"prop66": {
"type": "long"
},
"prop67": {
"type": "long"
},
"prop68": {
"type": "long"
},
"prop69": {
"type": "long"
},
"prop70": {
"type": "long"
},
"prop71": {
"type": "long"
},
"prop72": {
"type": "long"
},
"prop73": {
"type": "long"
},
"prop74": {
"type": "long"
},
"prop75": {
"type": "long"
},
"prop76": {
"type": "long"
},
"prop77": {
"type": "long"
},
"prop78": {
"type": "long"
},
"prop79": {
"type": "long"
},
"prop80": {
"type": "long"
}
}
}
},
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "1"
}
}
}
Поиск: (удалить / добавить агрегацию, чтобы увидеть проблему)
GET product_test/_search
{
"from": 0,
"size": 0,
"aggs": {
"prop1": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop1",
"size": 1000
}
}
}
},
"prop2": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop2",
"size": 1000
}
}
}
},
"prop3": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop3",
"size": 1000
}
}
}
},
"prop4": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop4",
"size": 1000
}
}
}
},
"prop5": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop5",
"size": 1000
}
}
}
},
"prop6": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop6",
"size": 1000
}
}
}
},
"prop7": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop7",
"size": 1000
}
}
}
},
"prop8": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop8",
"size": 1000
}
}
}
},
"prop9": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop9",
"size": 1000
}
}
}
},
"prop10": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop10",
"size": 1000
}
}
}
},
"prop11": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop11",
"size": 1000
}
}
}
},
"prop12": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop12",
"size": 1000
}
}
}
},
"prop13": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop13",
"size": 1000
}
}
}
},
"prop14": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop14",
"size": 1000
}
}
}
},
"prop15": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop15",
"size": 1000
}
}
}
},
"prop16": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop16",
"size": 1000
}
}
}
},
"prop17": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop17",
"size": 1000
}
}
}
},
"prop18": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop18",
"size": 1000
}
}
}
},
"prop19": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop19",
"size": 1000
}
}
}
},
"prop20": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop20",
"size": 1000
}
}
}
},
"prop21": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop21",
"size": 1000
}
}
}
},
"prop22": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop22",
"size": 1000
}
}
}
},
"prop23": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop23",
"size": 1000
}
}
}
},
"prop24": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop24",
"size": 1000
}
}
}
},
"prop25": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop25",
"size": 1000
}
}
}
},
"prop26": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop26",
"size": 1000
}
}
}
},
"prop27": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop27",
"size": 1000
}
}
}
},
"prop28": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop28",
"size": 1000
}
}
}
},
"prop29": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop29",
"size": 1000
}
}
}
},
"prop30": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop30",
"size": 1000
}
}
}
},
"prop31": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop31",
"size": 1000
}
}
}
},
"prop32": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop32",
"size": 1000
}
}
}
},
"prop33": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop33",
"size": 1000
}
}
}
},
"prop34": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop34",
"size": 1000
}
}
}
},
"prop35": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop35",
"size": 1000
}
}
}
},
"prop36": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop36",
"size": 1000
}
}
}
},
"prop37": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop37",
"size": 1000
}
}
}
},
"prop38": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop38",
"size": 1000
}
}
}
},
"prop39": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop39",
"size": 1000
}
}
}
},
"prop40": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop40",
"size": 1000
}
}
}
},
"prop41": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop41",
"size": 1000
}
}
}
},
"prop42": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop42",
"size": 1000
}
}
}
},
"prop43": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop43",
"size": 1000
}
}
}
},
"prop44": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop44",
"size": 1000
}
}
}
},
"prop45": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop45",
"size": 1000
}
}
}
},
"prop46": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop46",
"size": 1000
}
}
}
},
"prop47": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop47",
"size": 1000
}
}
}
},
"prop48": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop48",
"size": 1000
}
}
}
},
"prop49": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop49",
"size": 1000
}
}
}
},
"prop50": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop50",
"size": 1000
}
}
}
},
"prop51": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop51",
"size": 1000
}
}
}
},
"prop52": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop52",
"size": 1000
}
}
}
},
"prop53": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop53",
"size": 1000
}
}
}
},
"prop54": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop54",
"size": 1000
}
}
}
},
"prop55": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop55",
"size": 1000
}
}
}
},
"prop56": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop56",
"size": 1000
}
}
}
},
"prop57": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop57",
"size": 1000
}
}
}
},
"prop58": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop58",
"size": 1000
}
}
}
},
"prop59": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop59",
"size": 1000
}
}
}
},
"prop60": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop60",
"size": 1000
}
}
}
},
"prop61": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop61",
"size": 1000
}
}
}
},
"prop62": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop62",
"size": 1000
}
}
}
},
"prop63": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop63",
"size": 1000
}
}
}
},
"prop64": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop64",
"size": 1000
}
}
}
},
"prop65": {
"filter": {},
"aggs": {
"terms": {
"terms": {
"field": "prop65",
"size": 1000
}
}
}
}
}
}
2 ответа
Причиной проблемы на самом деле было связано с пустым предложением фильтра в некоторых случаях, потому что оно создавало предупреждение для каждого ухудшения. А в Elastic Cloud было ограничение в 64 предупреждения - отсюда и ошибка. (они увеличивают это число сейчас)
Мы исправили это, добавив match_all в тех случаях, когда он был пустым.
Какова цель безусловной агрегации "фильтра" поверх каждой агрегации "терминов"? Если это не только для упрощения exmaple, чем кажется ненужным. Возможно, вам следует попробовать удалить эти агенты 'filter' и вместо этого поставить все агенты 'term' в качестве верхнего уровня.