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

Elasticsearch查询:如何筛选有eventName=mko无mkp的用户ID

Elasticsearch 多事件关联用户筛选方案

以下是满足需求的最优查询实现,单次查询即可直接返回符合条件的userId:

GET /你的索引名称/_search
{
  "size": 0,
  "query": {
    "terms": {
      "eventName.keyword": ["mko", "mkp"]
    }
  },
  "aggs": {
    "valid_user_groups": {
      "terms": {
        "field": "userId.keyword",
        "size": 10000
      },
      "aggs": {
        "user_event_types": {
          "terms": {
            "field": "eventName.keyword",
            "size": 2
          }
        },
        "filter_target_user": {
          "bucket_selector": {
            "buckets_path": {
              "total_event_types": "user_event_types._bucket_count",
              "has_mko_event": "user_event_types['mko']._count"
            },
            "script": "params.total_event_types == 1 && params.has_mko_event != null"
          }
        }
      }
    }
  }
}

说明

  • 执行逻辑:
    • 首先通过query过滤仅保留eventName为mko或mkp的文档,缩小后续计算范围
    • 按userId做分组聚合,统计每个用户对应的事件类型
    • 用管道过滤器筛选出仅有一种事件类型、且该类型为mko的用户分组,自然排除了存在mkp事件的用户
  • 适配调整:
    • 若你的eventName、userId字段本身就是keyword类型,去掉查询语句中的.keyword后缀即可
    • 若需要返回的符合条件的用户数超过10000,可调整terms聚合的size参数,或改用composite聚合实现滚动分页查询
  • 性能优势:无需多次查询后在内存中做集合对比,单请求即可得到结果,是该场景下的最优实现方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 21:48:03