es嵌套聚合dsl(求均值,求和)

【1】根据客户号分组后求均值和求和 

// dsl
{
    "_source":["RCRD_ID", "STATE", "BUSI_CODE"]
	, "query":{
		"bool":{
			"filter":[
				{
					"term":{
						"STATE":"PDOS"
					}				
				}
				
			]
		}					
	}
    , "aggs": {
        "by_loans":{
            "nested":{
                "path":"LOANS"
            }, 
            "aggs":{
                "group_by_cust_num":{
                    "terms":{
                        "field":"LOANS.CUST_NUM"
                    } 
                    , "aggs":{
                        "by_avg_loan_bal_sum":{
                            "avg":{
                                "field":"LOANS.OVD_MONEY_SUM"
                            }   
                        }
                        , "by_sum_loan_bal_sum":{
                            "sum":{
                                "field":"LOANS.OVD_MONEY_SUM"
                            }   
                        }
                    }							
                }
               

            }
        }
    }
}
// 结果
{
    "took": 8,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 0.0,
        "hits": [
            {
                "_index": "pdi_cust",
                "_type": "_doc",
                "_id": "tr_rd_01",
                "_score": 0.0,
                "_source": {
                    "RCRD_ID": "tr_rd_01",
                    "STATE": "PDOS",
                    "BUSI_CODE": "pdi"
                }
            },
            {
                "_index": "pdi_cust",
                "_type": "_doc",
                "_id": "tr_rd_02",
                "_score": 0.0,
                "_source": {
                    "RCRD_ID": "tr_rd_02",
                    "STATE": "PDOS",
                    "BUSI_CODE": "pdi"
                }
            },
            {
                "_index": "pdi_cust",
                "_type": "_doc",
                "_id": "tr_rd_03",
                "_score": 0.0,
                "_source": {
                    "RCRD_ID": "tr_rd_03",
                    "STATE": "PDOS",
                    "BUSI_CODE": "pdi"
                }
            }
        ]
    },
    "aggregations": {
        "by_loans": {
            "doc_count": 6,
            "group_by_cust_num": {
                "doc_count_error_upper_bound": 0,
                "sum_other_doc_count": 0,
                "buckets": [
                    {
                        "key": "CUST_NUM_01",
                        "doc_count": 2,
                        "by_sum_loan_bal_sum": {
                            "value": 3333.0
                        },
                        "by_avg_loan_bal_sum": {
                            "value": 1666.5
                        }
                    },
                    {
                        "key": "CUST_NUM_02",
                        "doc_count": 2,
                        "by_sum_loan_bal_sum": {
                            "value": 2227.0
                        },
                        "by_avg_loan_bal_sum": {
                            "value": 1113.5
                        }
                    },
                    {
                        "key": "CUST_NUM_03",
                        "doc_count": 2,
                        "by_sum_loan_bal_sum": {
                            "value": 2231.0
                        },
                        "by_avg_loan_bal_sum": {
                            "value": 1115.5
                        }
                    }
                ]
            }
        }
    }
}

【2】求整个索引的均值和总和

// dsl
{
    "_source":["RCRD_ID", "STATE", "BUSI_CODE"]
	, "query":{
		"bool":{
			"filter":[
				{
					"term":{
						"STATE":"PDOS"
					}				
				}
				
			]
		}					
	}
    , "aggs": {
        "by_loans":{
            "nested":{
                "path":"LOANS"
            }, 
            "aggs":{
                "by_avg_loan_bal_sum":{
                            "avg":{
                                "field":"LOANS.OVD_MONEY_SUM"
                            }   
                        }
                        , "by_sum_loan_bal_sum":{
                            "sum":{
                                "field":"LOANS.OVD_MONEY_SUM"
                            }   
                        }
            }
        }
    }
}
// 结果
{
    "took": 12,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 0.0,
        "hits": [
            {
                "_index": "pdi_cust",
                "_type": "_doc",
                "_id": "tr_rd_01",
                "_score": 0.0,
                "_source": {
                    "RCRD_ID": "tr_rd_01",
                    "STATE": "PDOS",
                    "BUSI_CODE": "pdi"
                }
            },
            {
                "_index": "pdi_cust",
                "_type": "_doc",
                "_id": "tr_rd_02",
                "_score": 0.0,
                "_source": {
                    "RCRD_ID": "tr_rd_02",
                    "STATE": "PDOS",
                    "BUSI_CODE": "pdi"
                }
            },
            {
                "_index": "pdi_cust",
                "_type": "_doc",
                "_id": "tr_rd_03",
                "_score": 0.0,
                "_source": {
                    "RCRD_ID": "tr_rd_03",
                    "STATE": "PDOS",
                    "BUSI_CODE": "pdi"
                }
            }
        ]
    },
    "aggregations": {
        "by_loans": {
            "doc_count": 6,
            "by_sum_loan_bal_sum": {
                "value": 7791.0
            },
            "by_avg_loan_bal_sum": {
                "value": 1298.5
            }
        }
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 Elasticsearch 的嵌套聚合查询,你可以使用 Elasticsearch 的 AggregationBuilders 类来创建嵌套聚合查询。具体实现步骤如下: 1. 创建一个嵌套聚合查询,用于组合多个子聚合查询。 2. 在嵌套聚合查询中添加多个子聚合查询,分别对应不同的聚合方式。 3. 如果你需要对子聚合查询进行分组,可以在子聚合查询中添加 terms 聚合查询。 4. 如果你需要对子聚合查询进行计数,可以在子聚合查询中添加 count 聚合查询。 5. 执行查询并处理结果。 以下是一个示例 Java 代码,用于实现 Elasticsearch 的嵌套聚合查询: ``` SearchResponse response = client.prepareSearch("index_name") .addAggregation( AggregationBuilders.nested("nested_agg", "nested_field") .subAggregation(AggregationBuilders.terms("term_agg") .field("term_field")) .subAggregation(AggregationBuilders.count("count_agg") .field("count_field"))) .execute() .actionGet(); Nested nestedAgg = response.getAggregations().get("nested_agg"); Terms termAgg = nestedAgg.getAggregations().get("term_agg"); long totalCount = nestedAgg.getAggregations().get("count_agg").getDocCount(); ``` 其中,"index_name" 是你要查询的索引名称,"nested_field" 是你要进行嵌套聚合查询的字段名称,"term_field" 和 "count_field" 分别是你要进行分组和计数的字段名称。你可以根据实际情况进行修改。执行完查询后,你可以从查询结果中获取嵌套聚合对象,并进一步获取子聚合对象的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值