Elasticsearch中的多个组

时间:2015-07-13 23:19:15

标签: elasticsearch

如何为以下SQL查询编写有效的ES查询?

Select sum(visits) visits
from index
group by ip, port
order by visits desc
limit 10

我正在使用ES查询,但这将命令访问端口桶。在通过目的地IP和端口对它们进行分组后,我无法获得热门访问。

"aggregations" : {
    "ip": 
    {
        "terms": 
        {
            "field": "ip",
            "size": 10
        },
        "aggregations": 
        {
            "port": 
            {
                "terms": 
                {
                    "field": "port",
                    "size": 0,
                    "order": 
                    {
                        "visits": "desc"
                    }
                },
                "aggregations": 
                {
                    "visits": 
                    {
                        "sum": 
                        {
                            "field": "visits"
                        }
                    }
                }
            }
        }
    }
}

有人可以帮我这个吗?

感谢。

1 个答案:

答案 0 :(得分:-1)

Elasticsearch中的数据

 ip            port           visits

    1.1.1.1        80             10
    1.1.1.2        80             10 
    1.1.1.1        80             20
    1.1.1.3        20             100 
    1.1.1.1        57             20
    1.1.1.1        57             200

ES回复

    1.1.1.1        
             57             200
             80             50
    1.1.1.2       
             80             10 
    1.1.1.3        
             20             100  

<强>预期

1.1.1.1        
         57             200
1.1.1.3        
         20             100     
1.1.1.1               
         80             50
1.1.1.2       
         80             10 

ES的作用是,首先按IP和按端口分组,最后将访问总和并通过端口聚合器内的desc安排访问。因此,这不会给出前10名访问,而是会在每个端口内排名前10位

<强>解

使用脚本合并两个字段并按

应用分组
 {
  "size": 0,
  "aggs": {
    "destination": {
      "terms": {
        "script": "doc['ip'].value +  ':'  + doc['port'].value", "order": {
          "visits": "desc"
        }
      },
                "aggregations": 
                {
                    "visits": 
                    {
                        "sum": 
                        {
                            "field": "visits"
                        }

                    }
                }
    }
  }
}

希望这会有所帮助。