Я пытаюсь выполнить несколько агрегаций с возможностью сортировки по любому из них в ElasticSearch. Думайте об этом как о SQL запросе:
SELECT a, count(a), sum(b), avg(c), (etc) FROM Table1 GROUP BY a ORDER BY [any field] ASC/DESC
В этом случае поле a является строковым полем с ключевым словом. Я мог бы использовать агрегирование терминов, но проблема с этим счетом не гарантируется, что он будет точным, в зависимости от того, как результаты разбиты на фрагменты. Я мог бы установить shard_size до абсурдно большого числа, но потенциально может быть огромное количество записей в каждом шарде, и это, вероятно, увеличило бы стоимость запроса. Каков максимальный размер shard_size? 2 ^ 32 - 1? Или это long, а не int?
Тогда возникает проблема сортировки. Мне нужна не только точность 100%, но и сортировка по любому полю в предложении select этого запроса, и ElasticSearch, похоже, не нравится. Я видел bucket_sort как средство сортировки подагг, но проблема в том, что я не ищу сегменты, я ищу отдельные, отдельные значения.
Я знаю, что есть нативный SQL API, но он имеет жесткую ограничение в 512 строк при попытке сортировки по любому из этих сгруппированных полей, так что это не так. API перевода SQL также выглядит довольно ограниченным, так как я могу сделать несколько изменений в этом запросе и получить точно такой же результат из API перевода.
Я просто слишком сильно толкаю ElasticSearch за пределы того, что он делает предполагалось сделать с этим?