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

Elasticsearch查询需求:过滤每个customer_id首条记录后按月统计

解决方案

要实现按客户去重(保留每个客户最早创建的记录)后按月统计的需求,可以通过Elasticsearch的多层聚合+管道聚合完成,以下是两种可行的查询方案:

方案一:高效统计(仅保留日期)

如果只需要统计每个客户最早创建时间的月度分布,这种方法性能更优:

POST /log_report/_search
{
  "size": 0,
  "aggs": {
    // 第一步:按customer_id分组
    "group_by_customer": {
      "terms": {
        "field": "customer_id",
        "size": 10000  // 需设置为大于等于你的唯一客户数,避免数据截断
      },
      // 第二步:在每个客户组内取最早的created_at
      "aggs": {
        "earliest_created_at": {
          "min": {
            "field": "created_at"
          }
        }
      }
    },
    // 第三步:管道聚合——对所有客户的最早创建时间按月度统计
    "monthly_distribution": {
      "date_histogram": {
        "field": "earliest_created_at",
        "calendar_interval": "month",
        "format": "yyyy-MM"
      },
      "buckets_path": "group_by_customer>earliest_created_at",
      "gap_policy": "skip"  // 跳过无数据的月份
    }
  }
}

方案二:保留完整首条记录

如果需要获取每个客户首条记录的完整信息,再做月度统计,可以用top_hits聚合:

POST /log_report/_search
{
  "size": 0,
  "aggs": {
    "group_by_customer": {
      "terms": {
        "field": "customer_id",
        "size": 10000
      },
      "aggs": {
        // 获取每个客户created_at最早的一条记录,仅返回需要的字段
        "first_record": {
          "top_hits": {
            "size": 1,
            "sort": [{"created_at": {"order": "asc"}}],
            "_source": ["created_at", "customer_id"]  // 按需添加其他字段
          }
        }
      }
    },
    "monthly_stats": {
      "date_histogram": {
        "field": "created_at",
        "calendar_interval": "month",
        "format": "yyyy-MM"
      },
      "buckets_path": "group_by_customer>first_record.hits.hits._source.created_at",
      "gap_policy": "skip"
    }
  }
}

关键注意事项

  • terms聚合的size参数:必须设置为大于等于你的唯一客户ID总数,否则会有部分客户被过滤,导致统计结果不准确。如果客户数量极大,建议改用composite聚合分页处理。
  • 字段映射验证:确保created_at字段的映射类型是date,可以通过GET /log_report/_mapping命令检查,否则日期聚合会失败。
  • 性能优化:数据量较大时,建议在业务低峰期执行查询;如果需要频繁统计,可以考虑预先构建汇总索引。

内容的提问来源于stack exchange,提问作者Thanh Khánh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:01:10