ElasticSearch запросы, агрегаты, сортировка и точность - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь выполнить несколько агрегаций с возможностью сортировки по любому из них в 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 за пределы того, что он делает предполагалось сделать с этим?

...