Java 在不影响性能的情况下将Integer.MAX_值传递给elasticsearch可以吗?
我正在尝试使用JavaAPI查询elasticsearch以获得所有不同的字段Java 在不影响性能的情况下将Integer.MAX_值传递给elasticsearch可以吗?,java,
elasticsearch,Java,
elasticsearch,我正在尝试使用JavaAPI查询elasticsearch以获得所有不同的字段 TermsAggregationBuilder aggregation = AggregationBuilders.terms("count").field(field). size(Integer.MAX_VALUE). order(BucketOrder.key(true)); 我事先不知道场的基数。在不影响弹性搜索性能的情况下传递
TermsAggregationBuilder aggregation =
AggregationBuilders.terms("count").field(field).
size(Integer.MAX_VALUE).
order(BucketOrder.key(true));
我事先不知道场的基数。在不影响弹性搜索性能的情况下传递Integer.MAX_值可以吗。或者有其他选择吗?引用弹性:
如果要检索嵌套术语聚合中的所有术语或术语的所有组合,应使用复合聚合,该聚合允许对所有可能的术语进行分页,而不是设置大于术语聚合中字段基数的大小。术语聚合旨在返回顶部术语,不允许分页
以及:
请求的大小越大,结果越准确,但计算最终结果的成本也越高(这是因为在碎片级别上管理的优先级队列越大,以及节点和客户端之间的数据传输越大)
所以答案是:使用MAX_值可能不是一个好主意,不仅是因为潜在的性能影响,更重要的是因为:这样做在概念上是错误的 我想这可能取决于许多微妙的细节,其中许多隐藏在您的环境和配置中。你为什么不简单地尝试一下发生了什么,然后在改变之前/之后进行测量,看看比较数字呢。10万份文件。因此无法从该数据集推断性能。生产文件的数量可能高达1B。两个电话怎么样?在下一次调用中使用值获取基数。这比使用scroll的复合聚合更好吗?@ShashwatKumar我希望能回答这个问题,但我不是弹性专家。如果没有更好的答案出现在这里,我建议你尝试看看他们是否有一些用户论坛,你可以问。。。