首页 > 解决方案 > 弹性搜索按特定字段的计数分组

问题描述

我有一个包含以下文档的弹性搜索索引

    {
       "id":1
      "mainid  ": "497940311988134801282012-04-10  ",

    }

  {
       "id":2
      "mainid  ": "497940311988134801282012-04-10  ",

    }

我希望有一个类似于 -example mysql table 的查询

id    mainid                                       
1     497940311988134801282012-04-10                

2     497940311988134801282012-04-10                
3     497940311988134801282012-04-10              
4     something different





select id ,mainid ,count(mainid) as county  from wfcharges group by mainid,id having county>1;

在弹性搜索中,因为弹性中没有可用的计数聚合功能。我被困在这里。这就是我尝试过的。任何建议或在线资源。谢谢

GET /wfcharges/_search
{
    "aggs" : {
        "countfield" : {
            "count" : { "field" : "mainid" }
        }
    }
}

标签: elasticsearch

解决方案


我认为您想使用术语 aggregation。这将按相似的术语分组并返回每个术语的计数。例如,查看链接的 url。

在你的情况下,它看起来像这样:

GET /wfcharges/_search
{
    "aggs" : {
        "countfield" : {
            "terms" : { "field" : "mainid" }
        }
    }
}

推荐阅读