gpt4 book ai didi

date - 多个字段的 Elasticsearch 日期范围聚合

转载 作者:行者123 更新时间:2023-11-29 02:53:36 26 4
gpt4 key购买 nike

我的文档结构如下:

{
"element": "A",
"date": "2014-01-01",
"valid_until": "2014-02-01"
},
{
"element": "A",
"date": "2014-02-01",
"valid_until": "9999-12-31"
}

日期“9999-12-31”在这里表示:“它还没有过期”。总是有这样的范围,所以对于给定的元素“A”,date > valid_until 永远不会重叠。因此,我可以使用如下伪代码来计算我有多少元素:COUNT elements WHERE date < date_to_count AND valid_until >= date_to_count

其中“date_to_count”是我要为其计算值的日期。由于我想在多个时间点进行计算,因此我可以使用日期直方图或日期范围聚合。但是,日期范围似乎只适用于一种字段。理想情况下,我希望能够做到这一点:

"aggs": {
"foo": {
"date_range": {
"fields": ["date", "valid_until"],
"ranges": [
{"from": "2014-01-01", "to": {"2014-02-01"}},
{"from": "2014-02-01", "to": {"2014-03-01"}},
{"from": "2014-03-01", "to": {"2014-04-01"}}
]
}
}
}

其中“日期”将用于“从”,而“valid_until”将用于“至”。

我已经用脚本尝试了其他几种想法,但找不到一种有效的方法来做到这一点:/。

我想我也可以解决这个问题,如果在脚本中,我可以访问当前的从/到值,但我又一次尝试了“ctx.to”、“context.to”之类的东西,但是这些变量是未定义的。

谢谢!

最佳答案

由于 date_rangedate_histogram 聚合都在单个字段上工作,我认为您无法通过聚合实现您的目标。但是,如果您没有太多需要查询的日期范围,则可以调用 count API查询每个日期范围。这看起来像这样:

"query": {
"filtered": {
"filter": {
"bool" {
"must": [
{ "range": { "date": { "gte": "2014-01-01" }}},
{ "range": { "valid_until": { "lt": "2014-02-01" }}}
]
}
}
}
}

关于date - 多个字段的 Elasticsearch 日期范围聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26698334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com