Kibana 获取在所需持续时间内恰好发生x次的事件的详细信息

zbdgwd5y  于 2022-12-09  发布在  Kibana
关注(0)|答案(1)|浏览(188)

在ElasticSearch中,只有当事件namen天或特定持续时间内恰好发生x次时,我才需要获取记录。
示例索引数据如下:

{"event":{"name":"event1"},"timestamp":"2010-06-20"}

我可以获得在特定持续时间内所需事件名称出现次数最少的记录。但我想要的不是最少,而是精确的匹配计数。以下是我尝试的方法:

{
  "_source": true,
  "size": 0, 
  "query": { 
    "bool": {
      "filter":
      {
        "range": { "timestamp": { "gte": "2010", "lte": "2016" }}
      },
      "must":
      [
        { "match": { "event.name.keyword": "event1" }}
      ]
    }
  },
  "aggs": {
    "occurrence": {
      "terms": {
        "field": "event.name.keyword",
        "min_doc_count": 5,
        "size": 10
      }
    }
  }
}

另一种方法是使用value_count,但在这里,我也无法添加一个条件来匹配精确的匹配。

{
  "_source": true,
  "size": 0, 
  "query": { 
    "bool": {
      "filter":
      {
        "range": { "timestamp": { "gte": "2010", "lte": "2016" }}
      },
      "must":
      [
        { "match": { "event.name.keyword": "event1" }}
      ]
    }
  },
  "aggs": {
    "occurrence": {
      "value_count": {
        "field": "event.name.keyword"
      }
    }
  }
}

它提供如下输出(为简洁起见,删除了其他输出):

"aggregations" : {
    "occurrence" : {
      "value" : 2
    }
  }

但是我需要在aggr的输出中添加一个条件(这里是occurrence),以精确匹配事件的发生次数,这样我就可以仅在事件发生x次时才获得记录。
ESMaven能帮我解决这个问题吗?

sg3maiej

sg3maiej1#

您可以使用Bucket Selector Aggregation并添加如下所示的计数条件。下面的查询将为您提供总共发生5次的事件。您可以为您想要应用的任何筛选器添加查询子句,如日期范围或事件名称或任何其他内容。

{
  "size": 0,
  "aggs": {
    "count": {
      "terms": {
        "field": "event.name.keyword",
        "size": 10
      },
      "aggs": {
        "val_count": {
          "value_count": {
            "field": "event.name.keyword"
          }
        },
        "selector": {
          "bucket_selector": {
            "buckets_path": {
              "my_var1": "val_count"
            },
            "script": "params.my_var1 == 5"
          }
        }
      }
    }
  }
}

您将得到如下结果:

"aggregations" : {
    "count" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "event1",
          "doc_count" : 5,
          "val_count" : {
            "value" : 5
          }
        },
        {
          "key" : "event8",
          "doc_count" : 5,
          "val_count" : {
            "value" : 5
          }
        }
      ]
    }
  }

相关问题