es 多个字段 group by

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
    "size": 0,
    "aggregations": {
        "createDate": {
            "date_histogram": {
                "field": "createDate",
                "format": "yyyy-MM-dd",
                "time_zone": "+08:00",
                "calendar_interval": "1d",
                "offset": 0,
                "order": {
                    "_key": "asc"
                },
                "keyed": false,
                "min_doc_count": 1
            },
            "aggregations": {
                "userAccount": {
                    "terms": {
                        "field": "userAccount"
                    }
                }
            }
        }
    }
}

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
GET 索引name/索引type/_search
{
    "size": 0,
    "aggregations": {
        "字段一的结果命名": {
            "terms": {
                "field": "要group的字段"
            },
            "aggregations": {
                "字段二的结果命名": {
                    "terms": {
                        "field": "要group的字段"
                    }
                }
            }
        }
    }
}

  代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public void demo1(RestHighLevelClient client) {
    // group
    TermsAggregationBuilder oneBuilder = AggregationBuilders.terms("one").field("flowCode.keyword");
    TermsAggregationBuilder twoBuilder = AggregationBuilders.terms("two").field("stepExecuteId");
    oneBuilder.subAggregation(twoBuilder);
    // search
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.aggregation(oneBuilder);
    // request
    SearchRequest searchRequest = new SearchRequest("index");
    searchRequest.types("type");
    searchRequest.source(searchSourceBuilder);
    try {
        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
        Terms oneTerm = (Terms) response.getAggregations().asMap().get("one");
        for (Terms.Bucket bucket : oneTerm.getBuckets()) {
            System.out.println("one下面的" + bucket.getKey() + ", count是: " + bucket.getDocCount());
            Terms twoTerm = (Terms) bucket.getAggregations().asMap().get("two");
            for (Terms.Bucket twoTermBucket : twoTerm.getBuckets()) {
                System.out.println("two下面的" + twoTermBucket.getKey() + ", count是: " + twoTermBucket.getDocCount());
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

  参考:https://blog.csdn.net/cainiao1412/article/details/120876972

posted @   ni当像鸟飞往你的山  阅读(193)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示