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

在ElasticSearch中创建「品牌爱好者」用户分群

ElasticSearch统计「品牌爱好者」数量实现方案

核心思路

通过日期范围过滤筛选过去x天的访问数据,再按唯一token分组统计访问次数,最后过滤出访问次数≥15的token并统计其数量。

具体DSL查询

将以下代码中的your_index_name替换为你的索引名,{{x_days}}替换为具体天数(如7代表过去7天):

POST /your_index_name/_search
{
  "size": 0,  // 不需要返回原始文档,只取聚合结果
  "query": {
    "range": {
      "time": {
        "gte": "now-{{x_days}}d",
        "lt": "now"
      }
    }
  },
  "aggs": {
    // 第一步:按token分组,统计每个token的访问次数
    "token_visit_stats": {
      "terms": {
        "field": "token.keyword",  // 若token是text类型必须加.keyword,keyword类型直接用token
        "size": 10000  // 根据实际token数量调整,确保覆盖所有符合条件的token
      },
      "aggs": {
        // 第二步:过滤出访问次数≥15的token分组
        "filter_brand_lovers": {
          "bucket_selector": {
            "buckets_path": {
              "visitCount": "_count"
            },
            "script": "params.visitCount >= 15"
          }
        }
      }
    },
    // 第三步:统计符合条件的token总数
    "brand_lover_total": {
      "stats_bucket": {
        "buckets_path": "token_visit_stats._count"
      }
    }
  }
}

结果解读

返回结果中,aggregations.brand_lover_total.count的值就是你需要的「品牌爱好者」数量(访问次数≥15的唯一token数)。

注意事项

  • 如果token字段是text类型,必须使用token.keyword进行聚合,否则会因分词导致分组错误。
  • terms聚合的size参数需根据实际token规模调整,若token数量极大(百万级以上),建议改用composite聚合实现分页统计,避免内存溢出。
  • 若你的ES版本不支持bucket_selector,可以先用terms聚合获取所有token的访问次数,再在客户端过滤统计符合条件的数量,但效率低于服务端过滤。

内容的提问来源于stack exchange,提问作者Jason Norwood-Young

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:45:45