使用elasticsearch直方图功能,我可以通过指定一个间隔将各种“范围”的数据放入一个bucket中。在本例中为“50”:
价格:0-50 50-100 100-150 150-200-250等
这工作正常,但返回的桶列表非常长。我更喜欢的是:
0-50 50-100 100-200 200-400 400-1000 1000+
或者类似的东西。有没有可能告诉es它应该返回什么间隔(/范围)?
使用elasticsearch直方图功能,我可以通过指定一个间隔将各种“范围”的数据放入一个bucket中。在本例中为“50”:
价格:0-50 50-100 100-150 150-200-250等
这工作正常,但返回的桶列表非常长。我更喜欢的是:
0-50 50-100 100-200 200-400 400-1000 1000+
或者类似的东西。有没有可能告诉es它应该返回什么间隔(/范围)?
2条答案
按热度按时间csga3l581#
你需要使用
numeric range
聚合,它允许您精确指定所需的间隔,例如:这应该给你你所期望的。
f4t66c6m2#
文档中明确指出
它在这些值上动态地构建固定大小(也称为间隔)的bucket。
我能想到的是,为了减少存储桶的数量,您可以使用脚本选项对值应用对数比例(或任何其他非线性比例,例如平方根,它将为您的特定数据集提供足够的粒度):
这将为bucket提供键1、2、3,…,表示区间[0;10), [10;100), [100;1000),…
通过对客户端的键应用反转功能(本例中为10倍),可以恢复原始比例。