首页 文章

Elasticsearch计算值范围内的文档

提问于
浏览
0

我有一组文档,每个文档都有最小和最大数字字段,例如

{ min: 50, max: 100 },
{ min: 75, max: 125 },
{ min: 75, max: 150 },
...

我事先知道可能的最大值是多少 . 我想要做的是一个存储桶聚合,用于计算包含存储桶值的文档数(在本示例中为包含),文档的最小值和最大值 . 所以,例如,如果我有钥匙桶

60, 80, 100, 120, 140, 160

我想收回(分别)的doc_counts:

1, 3, 3, 2, 1, 0

我觉得像脚本的范围聚合让我接近,但我不知道如何到达那里 . 也许我需要一个子聚合?

1 回答

  • 1

    您需要一个 filters 聚合,其中每个键对应一个单独的过滤器 . 这是两个键的示例

    {
        "aggs": {
            "ranges": {
                "filters": {
                    "filters": {
                        "60": {
                            "bool": {
                                "must": [
                                    {
                                        "range": {
                                            "min": {
                                                "gte": 60.0
                                            }
                                        }
                                    },
                                    {
                                        "range": {
                                            "max": {
                                                "lt": 60.0
                                            }
                                        }
                                    }
                                ]
                            }
                        },
                        "80": {
                            "bool": {
                                "must": [
                                    {
                                        "range": {
                                            "min": {
                                                "gte": 80.0
                                            }
                                        }
                                    },
                                    {
                                        "range": {
                                            "max": {
                                                "lt": 80.0
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
    

    我不认为有一种更简单的方法,因为您的范围在单独的字段中位于您的文档中

相关问题