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

如何使用Elasticsearch聚合功能统计邮件域名的数量?

解决Elasticsearch邮件域名计数的聚合方案

没问题,我来帮你搞定这个邮件域名统计的需求!要实现按邮箱域名分组计数,我们可以利用Elasticsearch的terms聚合结合脚本(script)来提取邮箱中的域名部分,具体方案如下:

完整查询DSL

GET /your_index_name/_search
{
  "size": 0,  // 无需返回具体文档,只获取聚合结果
  "aggs": {
    "email_domain_counts": {
      "terms": {
        "script": {
          "source": "def email = doc['email'].value; return email.substring(email.indexOf('@'));"
        }
      }
    }
  }
}

关键部分解释

  • size: 0:因为我们只关心聚合统计数据,不需要返回匹配的原始文档,设置为0可以减少不必要的数据传输,提升查询效率。
  • aggs下的email_domain_counts是自定义的聚合名称,你可以根据需要修改成更贴合业务的名字。
  • terms聚合:这是Elasticsearch最常用的分组统计聚合,会自动把相同域名的文档归为一组,并统计每组的文档数量。
  • 脚本逻辑:先获取email字段的具体值,通过indexOf('@')定位到@符号的位置,再用substring截取从@开始到字符串末尾的部分,这就是我们需要统计的邮箱域名(比如@gmail.com)。

预期结果

执行上述查询后,你会得到类似这样的聚合结果,完全符合你想要的统计需求:

{
  "aggregations": {
    "email_domain_counts": {
      "buckets": [
        {
          "key": "@gmail.com",
          "doc_count": 2
        },
        {
          "key": "@elastic.com",
          "doc_count": 1
        },
        {
          "key": "@hotmail.com",
          "doc_count": 1
        }
      ]
    }
  }
}

如果你的Elasticsearch版本较新(7.x及以上),需要确保集群允许使用inline脚本(默认是开启的,若有问题可以检查script.allowed_types配置)。另外,如果你需要频繁做这类统计,也可以考虑在索引时就把邮箱域名单独存为一个字段,这样聚合时不需要实时脚本计算,性能会更好哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:08:16