elasticsearch – 在低于值的最大时间戳上聚合

所以,我们试图按颜色汇总所有文档,

对于每种颜色,找到最大时间戳为max_timestamp.

然后,仅过滤max_timestamp低于现在-5m的桶.

这里的想法是检查过去5分钟内是否有没有报告文件的颜色.

这是我们现在得到的:

{
  "size": 0,
    "aggs": {
      "colors_aggs": {
        "terms": {
          "field": "color",
            "size": 10
          },
          "aggs": {
            "max_timestamp": {
              "max": {
                "field": "timestamp"
              }
            },
            "aggs": {
              "filter": {
                "range": {
                  "timestamp": {
                    "lt": "now-5m"
                  }
                }
              }
            }
          }
        }
      }
    }

它似乎忽略了第三个聚合.显示时间戳大于现在-5米的桶.

有帮助吗?

最佳答案 也许您可以使用脚本在最终聚合中过滤掉不需要的记录(在您的案例记录中,时间戳>“现在 – 5m”),然后您的最终聚合(最终输出)将仅基于所需的记录.

查询应该是这样的:

{
  "size": 0,
  "aggs": {
    "colors_aggs": {
      "terms": {
        "field": "color",
        "size": 10
      },
      "aggs": {
        "maximals": {
          "max": {
            "field": "timestamp":
          }
        },
        "max_bucket_filter": {
          "bucket_selector": {
            "buckets_path": {
              "maxs": "max_timestamp"
            },
            "script": {
              "lang": "expression",
              "script": "maxs < [CurrentUnixTime x 1000]"
            }
          }
        }
      }
    }
  }
}

请注意,上面的脚本不能接受关键字now-5m,因此每次执行查询时都必须设置当前的unix时间.

点赞