我正在尝试使用Java API查询elasticsearch以获取所有不同的字段。
TermsAggregationBuilder aggregation =
AggregationBuilders.terms("count").field(field).
size(Integer.MAX_VALUE).
order(BucketOrder.key(true));
我事先不知道字段的基数。是否可以传递Integer.MAX_VALUE而不会影响弹性搜索性能?还是有其他选择?
答案 0 :(得分:1)
引用弹性documentation:
如果要检索嵌套术语聚合中的所有术语或术语的所有组合,则应使用“复合”聚合,它允许对所有可能的术语进行分页,而不是将大小设置为大于术语聚合中字段的基数。术语“聚合”旨在返回最热门的术语,并且不允许分页
并且:
请求的大小越大,结果将越准确,但计算最终结果的成本也将越高(这既是由于在分片级别上管理的优先级队列较大,又是由于队列规模更大)节点和客户端之间的数据传输)。
所以答案是:使用MAX_VALUE可能不是一个好主意,这不仅是因为潜在的性能影响,而且更多是因为:从概念上讲,这样做是错误的。