Можно ли передавать Integer.MAX_VALUE в эластичный поиск, не влияя на производительность? - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь использовать Java API для запроса ввода-вывода и получения всех отдельных полей.

TermsAggregationBuilder aggregation =
        AggregationBuilders.terms("count").field(field).
                size(Integer.MAX_VALUE).
                order(BucketOrder.key(true));

Я не знаю кардинальности поля заранее. Можно ли передать Integer.MAX_VALUE без ущерба для эффективности упругого поиска. Или есть альтернатива?

1 Ответ

1 голос
/ 15 марта 2019

Цитирование эластичной документации :

Если вы хотите извлечь все термины или все комбинации терминов в агрегации вложенных терминов, вам следует использовать составное агрегирование, которое позволяет разбивать на страницы по всем возможным терминам, а не устанавливать размер, превышающий количество элементов в поле в агрегации терминов. , Агрегирование терминов предназначено для возврата верхних терминов и не допускает разбиение на страницы

И

Чем выше запрашиваемый размер, тем точнее будут результаты, но также и тем дороже будет вычислять окончательные результаты (как из-за больших очередей с приоритетом, которые управляются на уровне сегмента, так и из-за большего размера). передача данных между узлами и клиентом).

Таким образом, ответ таков: вероятно, не - хорошая идея использовать MAX_VALUE, не только из-за потенциального влияния на производительность, но еще и потому, что: это концептуально неправильно делать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...