elasticsearch直方图,多种区间类型?

xwbd5t1u  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(2)|浏览(433)

使用elasticsearch直方图功能,我可以通过指定一个间隔将各种“范围”的数据放入一个bucket中。在本例中为“50”:
价格:0-50 50-100 100-150 150-200-250等
这工作正常,但返回的桶列表非常长。我更喜欢的是:
0-50 50-100 100-200 200-400 400-1000 1000+
或者类似的东西。有没有可能告诉es它应该返回什么间隔(/范围)?

csga3l58

csga3l581#

你需要使用 numeric range 聚合,它允许您精确指定所需的间隔,例如:

{
    "aggs" : {
        "price_ranges" : {
            "range" : {
                "field" : "price",
                "ranges" : [
                    { "to" : 50 },
                    { "from" : 50, "to" : 100 },
                    { "from" : 100, "to": 200 },
                    { "from" : 200, "to": 400 },
                    { "from" : 400, "to": 1000 },
                    { "from" : 1000 }
                ]
            }
        }
    }
}

这应该给你你所期望的。

f4t66c6m

f4t66c6m2#

文档中明确指出
它在这些值上动态地构建固定大小(也称为间隔)的bucket。
我能想到的是,为了减少存储桶的数量,您可以使用脚本选项对值应用对数比例(或任何其他非线性比例,例如平方根,它将为您的特定数据集提供足够的粒度):

{
    "aggs": {
        "prices": {
            "histogram": {
                "field": "price",
                "script": "Math.log10(_value)",
                "interval": 1
            }
        }
    }
}

这将为bucket提供键1、2、3,…,表示区间[0;10), [10;100), [100;1000),…
通过对客户端的键应用反转功能(本例中为10倍),可以恢复原始比例。

相关问题