ElasticSearch extended_bounds min max

 ppqq21 发布于 2022-12-13 19:48

我使用elasticsearch aggregations返回两个不同的聚合组,一个用于当前周,一个用于前一周,我当前的周聚合看起来像这样:

"aggregations": {            
    "current": {
        "date_histogram": {
            "field": "date",
            "interval": "1d",
            "min_doc_count": 0,
            "extended_bounds": {
                "min": new Date().setDate(new Date().getDate() - 7),
                "max": new Date().getDate()
            }
        }
    }
}

在这一点上一切都很好,即时使用min_doc_count,extended_bounds以填补空桶的空隙,以防万一.

在我的其他聚合上,我几乎以同样的方式重复这个过程,但我希望我的桶能够用于前一个时期!

我知道这extended_bounds 不是过滤桶,因此我想在我的聚合上添加一个过滤器,如下所示:

"aggregations": {
    filtered: {
        "filter" : { 
            "bool": {
                "must": [{
                    "range" : { 
                        date: {
                            from: new Date().setDate(new Date().getDate() - 14),
                            to: new Date().setDate(new Date().getDate() - 7)
                        }
                    }
                }]
            }
        },
    },
    "previous": {
        "date_histogram": {
            "field": "date",
            "interval": "1d",
            "min_doc_count": 0,
            "extended_bounds": {
                "min": new Date().setDate(new Date().getDate() - 14),
                "max": new Date().setDate(new Date().getDate() - 7)
            }
        }
    }
}

第二个聚合应该回溯到时间,恰好是14天,直到7天前.我知道min工作,但max不是,返回的桶直到今天,即使我使用过滤器来限制范围,我must在这里使用,但似乎没有做任何事情.我对ES很新,也许我错过了一些明显的东西,原谅我缺乏知识.

1 个回答
  • 根据文件:

    请注意(如名称所示)extended_bounds不会过滤存储桶.这意味着,如果extended_bounds.min高于从文档中提取的值,则文档仍将指示第一个存储桶的内容(对于extended_bounds.max和最后一个存储桶也是如此).对于过滤存储桶,应该使用适当的from/to设置将直方图聚合嵌套在范围过滤器聚合下.

    例:

    {
        "query" : {
            "filtered" : { "filter": { "range" : { "price" : { "to" : "500" } } } }
        },
        "aggs" : {
            "prices" : {
                "histogram" : {
                    "field" : "price",
                    "interval" : 50,
                    "min_doc_count" : 0,
                    "extended_bounds" : {
                        "min" : 0,
                        "max" : 500
                    }
                }
            }
        }
    }
    

    简而言之:使用查询过滤器,或将直方图聚合嵌套在过滤器聚合中.在您的示例中,您不是嵌套聚合,而是并排使用它们(因此直方图agg不会被filter-agg过滤).

    2022-12-13 19:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有