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

使用Elastic查询同时在9月和10月有购买记录的用户数量

统计同时在9月和10月有购买行为的用户数量解决方案

核心思路

要找出同时在两个月份有购买记录的用户,需先筛选出所有9月或10月的购买文档,按用户分组后统计每个用户在两个月份的购买次数,最后筛选出两个月份都有购买的用户并统计总数。

可行的Elasticsearch查询示例

假设你的date_of_purchase字段是date类型(若为字符串类型,需确保格式符合日期解析要求,或优先将字段映射为date类型),查询如下:

{
  "size": 0, // 不需要返回具体文档,只看聚合结果
  "query": {
    "bool": {
      "should": [
        {
          "range": {
            "date_of_purchase": {
              "gte": "2022-09-01",
              "lte": "2022-09-30"
            }
          }
        },
        {
          "range": {
            "date_of_purchase": {
              "gte": "2022-10-01",
              "lte": "2022-10-31"
            }
          }
        }
      ],
      "minimum_should_match": 1 // 只要满足其中一个月份的购买即可进入聚合
    }
  },
  "aggs": {
    "group_by_customer": {
      "terms": {
        "field": "customer_id",
        "size": 10000 // 若用户数量超过1万,需调整此值或改用composite聚合分页
      },
      "aggs": {
        "check_purchase_months": {
          "filters": {
            "filters": {
              "september_purchase": {
                "range": {
                  "date_of_purchase": {
                    "gte": "2022-09-01",
                    "lte": "2022-09-30"
                  }
                }
              },
              "october_purchase": {
                "range": {
                  "date_of_purchase": {
                    "gte": "2022-10-01",
                    "lte": "2022-10-31"
                  }
                }
              }
            }
          }
        },
        "filter_both_months": {
          "bucket_selector": {
            "buckets_path": {
              "sept_count": "check_purchase_months.september_purchase._count",
              "oct_count": "check_purchase_months.october_purchase._count"
            },
            "script": "params.sept_count > 0 && params.oct_count > 0"
          }
        }
      }
    },
    "total_qualified_users": {
      "bucket_count": {
        "buckets_path": "group_by_customer"
      }
    }
  }
}

结果说明

执行查询后,total_qualified_users字段的数值即为同时在9月和10月产生购买行为的用户总数。

注意事项

  • 如果用户量级极大,terms聚合的size参数无法覆盖所有用户时,建议使用composite聚合进行分页统计,避免内存溢出。
  • 若date_of_purchase是字符串类型,需确保其格式(如yyyy-MM-dd)能被Elasticsearch正确识别为日期,否则需调整range查询的参数格式,或提前修改字段映射为date类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:25:26