You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kibana的KQL中查询同时有BUY_ITEM1和BUY_ITEM2的user_id?

查询同时存在BUY_ITEM1和BUY_ITEM2行为的user_id方法

现有日志数据

Elasticsearch中存储的日志样例如下:

{"@timestamp":"2022-07-19T11:24:16.274073+05:30","log":{"level":200,"logger":"production","message":"BUY_ITEM1","context":{"user_id":31312},"datetime":"2022-07-19T11:24:16.274073+05:30","extra":{"ip":"127.0.0.1"}}}
{"@timestamp":"2022-07-19T11:24:16.274073+05:30","log":{"level":200,"logger":"production","message":"BUY_ITEM2","context":{"user_id":31312},"datetime":"2022-07-19T11:24:16.274073+05:30","extra":{"ip":"127.0.0.1"}}}
{"@timestamp":"2022-07-19T11:24:16.274073+05:30","log":{"level":200,"logger":"production","message":"CLICK_ITEM3","context":{"user_id":31312},"datetime":"2022-07-19T11:24:16.274073+05:30","extra":{"ip":"127.0.0.1"}}}

关键说明

不能直接用log.message: "BUY_ITEM1" AND log.message: "BUY_ITEM2"查询,因为单条日志的log.message字段只能是其中一个值,必须通过聚合跨文档判断同一个user_id是否同时存在两种行为。

方法一:使用Kibana界面操作

  1. 在KQL输入框中过滤出包含目标行为的日志:
    log.message: ("BUY_ITEM1" OR "BUY_ITEM2")
    
  2. 进入Discover页面的「聚合」面板,添加按context.user_id的分组聚合;
  3. 为该分组添加两个子聚合:
    • 第一个子聚合选择「过滤」,过滤条件为log.message: "BUY_ITEM1";
    • 第二个子聚合选择「过滤」,过滤条件为log.message: "BUY_ITEM2";
  4. 筛选出两个子聚合计数均大于0的user_id,即为同时有两种购买行为的用户。

方法二:使用Elasticsearch DSL查询(Kibana Dev Tools中执行)

通过聚合+桶筛选直接得到符合条件的user_id:

{
  "size": 0,
  "query": {
    "bool": {
      "should": [
        {"term": {"log.message": "BUY_ITEM1"}},
        {"term": {"log.message": "BUY_ITEM2"}}
      ],
      "minimum_should_match": 1
    }
  },
  "aggs": {
    "group_by_user": {
      "terms": {
        "field": "context.user_id",
        "size": 1000
      },
      "aggs": {
        "has_buy1": {
          "filter": {"term": {"log.message": "BUY_ITEM1"}}
        },
        "has_buy2": {
          "filter": {"term": {"log.message": "BUY_ITEM2"}}
        },
        "has_both": {
          "bucket_selector": {
            "buckets_path": {
              "buy1Count": "has_buy1._count",
              "buy2Count": "has_buy2._count"
            },
            "script": "params.buy1Count > 0 && params.buy2Count > 0"
          }
        }
      }
    }
  }
}

执行后,aggregations.group_by_user.buckets中的结果就是同时存在两种购买行为的user_id列表。

内容的提问来源于stack exchange,提问作者Aishwarya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:39:20