regex - 使用Elasticsearch的邮件域的聚合计数

标签 regex elasticsearch aggregation

我的索引中包含以下文件:

{
    "name":"rakesh"
    "age":"26"
    "email":"rakesh@gmail.com"
}

{
    "name":"sam"
    "age":"24"
    "email":"samjoe@elastic.com"
}

{
    "name":"joseph"
    "age":"26"
    "email":"joseph@gmail.com"
}

{
    "name":"genny"
    "age":"24"
    "email":"genny@hotmail.com"
}

现在,我需要获取所有邮件域的计数。喜欢:
@gmail.com:2,
@hotmail.com:1,
@elastic.com:1

使用 Elasticsearch 聚合。

我可以找到与给定查询匹配的记录。但是我需要每个域的数量。

在此先感谢您的帮助。

最佳答案

通过创建仅包含电子邮件域名的子字段,可以轻松实现此目的。首先使用适当的分析器创建索引:

PUT my_index
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "email_domain_analyzer": {
            "type": "pattern",
            "pattern": "(.+)@",
            "lowercase": true
          }
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "email": {
          "type": "text",
          "fields": {
            "domain": {
              "type": "text",
              "fielddata": true,
              "analyzer": "email_domain_analyzer"
            }
          }
        }
      }
    }
  }
}

然后创建您的文档:
POST my_index/doc/_bulk
{ "index": {"_id": 1 }}
{ "name":"rakesh", "age":"26", "email":"rakesh@gmail.com" }
{ "index": {"_id": 2 }}
{ "name":"sam", "age":"24", "email":"samjoe@elastic.com" }
{ "index": {"_id": 3 }}
{ "name":"joseph", "age":"26", "email":"joseph@gmail.com" }
{ "index": {"_id": 4 }}
{ "name":"genny", "age":"24", "email":"genny@gmail.com" }

最后,您可以在email.domain字段上进行汇总,然后将确切获得所需的内容:
POST my_index/_search
{
  "size": 0,
  "aggs": {
    "domains": {
      "terms": {
        "field": "email.domain"
      }
    }
  }
}

关于regex - 使用Elasticsearch的邮件域的聚合计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50598368/

相关文章:

javascript - 用于查找不匹配的 mustache 表示法的正则表达式会在正确出现的情况下找到完全匹配

javascript - 获取字符串中两个符号之间的字符串并将它们插入数组

ruby-on-rails - 销毁时删除轮胎搜索索引

elasticsearch - 每天的文档数存储桶并应用了一些过滤器

aggregation - 数组中对象的 ArangoDB 聚合计数

javascript - 在 JavaScript 中聚合对象数组

c# - 在贪婪的重复中回溯平衡组可能会导致不平衡?

regex - 从文件名中有选择地提取数字

elasticsearch - elasticsearch同义词无法正常工作

python - Django 条件聚合