在Elasticsearch查询中进一步聚合日期直方图

3ks5zfa0  于 3个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(45)

我尝试提取每个event_type的事件发生的天数和最后一次发生的时间。目前我编写了以下查询:

{
    "size": 0,
    "query": { ... },
    "_source": false,
    "aggregations": {
        "events": { 
            "terms": { "field": "event_type" },
            "aggs": {
                "event_timestamp": {
                    "date_histogram": {
                        "field": "@timestamp",
                        "calendar_interval": "day",
                        "min_doc_count": 1,
                        "order": { "_key": "desc" }
                    }
                }
            }
        }
    }
}

字符串
提取要进一步转换的数据。在我的例子中,我只需要,对于每个event_type,第一个event_timestamp桶的键和event_timestamp桶的数量。这可以在提取后的第二步中轻松完成,但让Elastic来做会更干净。
Max bucket(或度量)聚合似乎没有帮助,因为我在date_histogram聚合中没有看到合适的buckets_path

3lxsmp7m

3lxsmp7m1#

良好的开端!!
下面是一个查询,它返回每个event_type的最新时间戳以及每个event_type的每日桶数(为此,您可以使用bucket_script pipeline aggregation,它只返回date_histogram聚合中的桶数)。
还要注意的是,filter_path查询字符串参数允许你只返回对你重要的内容,也就是说,你可以去掉你不感兴趣的日期直方图:

POST test/_search?filter_path=**.latest_timestamp.hits.hits._source,**.bucket_count,**.events.buckets.key
{
  "size": 0,
  "_source": false,
  "query": {...},
  "aggregations": {
    "events": {
      "terms": {
        "field": "event_type"
      },
      "aggs": {
        "latest_timestamp": {
          "top_hits": {
            "size": 1,
            "sort": {"@timestamp": "desc"}, 
            "_source": ["@timestamp"]
          }
        },
        "event_timestamp": {
          "date_histogram": {
            "field": "@timestamp",
            "calendar_interval": "day",
            "min_doc_count": 1,
            "order": {
              "_key": "desc"
            }
          }
        },
        "bucket_count": {
          "bucket_script": {
            "buckets_path": {
              "count": "event_timestamp._bucket_count"
            },
            "script": "params.count"
          }
        }
      }
    }
  }
}

字符串
对于每个事件类型,您将获得类似于以下内容的内容:

{
      "key": "2",                            <--- event type
      "latest": {
        "hits": {
          "hits": [
            {
              "_source": {
                "@timestamp": "2023-01-05"   <--- latest timestamp
              }
            }
          ]
        }
      },
      "bucket_count": {
        "value": 4                           <--- bucket count
      }
    },

相关问题