是否可以在不影响性能的情况下将Integer.MAX_VALUE传递给elasticsearch?

时间:2019-03-15 08:35:15

标签: java elasticsearch

我正在尝试使用Java API查询elasticsearch以获取所有不同的字段。

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

我事先不知道字段的基数。是否可以传递Integer.MAX_VALUE而不会影响弹性搜索性能?还是有其他选择?

1 个答案:

答案 0 :(得分:1)

引用弹性documentation

  

如果要检索嵌套术语聚合中的所有术语或术语的所有组合,则应使用“复合”聚合,它允许对所有可能的术语进行分页,而不是将大小设置为大于术语聚合中字段的基数。术语“聚合”旨在返回最热门的术语,并且不允许分页

并且:

  

请求的大小越大,结果将越准确,但计算最终结果的成本也将越高(这既是由于在分片级别上管理的优先级队列较大,又是由于队列规模更大)节点和客户端之间的数据传输)。

所以答案是:使用MAX_VALUE可能不是一个好主意,这不仅是因为潜在的性能影响,而且更多是因为:从概念上讲,这样做是错误的。