elasticsearch Elasticsearch:如何聚合和求和按具有数组的字段分组的数据
根据以下2条消息,我需要根据以下信息聚合数据: 粒度MyHeader.granularity myType MyHeader.myType 货币
elasticsearch Elasticsearch:如何聚合和求和按具有数组的字段分组的数据,
elasticsearch,
elasticsearch,根据以下2条消息,我需要根据以下信息聚合数据: 粒度MyHeader.granularity myType MyHeader.myType 货币 { "_source": { "MyData": { "MyHeader": { "granularity": "Level1", "myType": "YTD",
{
"_source": {
"MyData": {
"MyHeader": {
"granularity": "Level1",
"myType": "YTD",
"businessDate": "2018-12-27"
},
"MyBreakDown": [
{
"category": null,
"Currency": "eur",
"MyDetails": [
{
"Id": 123,
"myLocalAmount": 100
}
]
},
{
"category": null,
"Currency": "clf",
"MyDetails": [
{
"Id": 234,
"myLocalAmount": 130
}
]
},
{
"category": null,
"Currency": "usd",
"MyDetails": [
{
"Id": 120,
"myLocalAmount": 250
}
]
}
]
}
}
}, {
"_source": {
"MyData": {
"MyHeader": {
"granularity": "Level1",
"myType": "MTD",
"businessDate": "2018-12-27"
},
"MyBreakDown": [
{
"category": null,
"Currency": "eur",
"MyDetails": [
{
"Id": 123,
"myLocalAmount": 110
}
]
},
{
"category": null,
"Currency": "clf",
"MyDetails": [
{
"Id": 234,
"myLocalAmount": 120
}
]
},
{
"category": null,
"Currency": "usd",
"MyDetails": [
{
"Id": 120,
"myLocalAmount": 253
}
]
}
]
}
}
}
在这里,我可以进行基本聚合:
"aggs":{
"by_granularity":{
"terms":{
"field":"MyHeader.granularity"
},
"aggs":{
"by_myType ":{
"terms":{
"field":"MyHeader.myType"
}
}
}
}
},
"size":0
但是,货币位于数组字段下,无法使用它
我需要帮助如何在聚合中使用currency,这样它将在bucket中为我提供正确的数据
预期数据如下所示:
Level1->YTD->eur = 100
Level1->YTD->clf= 130
Level1->YTD->usd = 250
Level1->MTD->eur = 110
Level1->MTD->clf = 120
Level1->MTD->usd = 253
另外,索引不是由我们管理的,所以我不能在配置中更改任何内容。因此,希望看看是否有可能在ES查询中获得此类数据?尝试此查询,并按输出排列数据
{
"from": 0,
"size": 0,
"_source": {
"includes": [
"MyData.MyBreakDown.MyDetails.myLocalAmount"
],
"excludes": []
},
"stored_fields": "MyData.MyBreakDown.MyDetails.myLocalAmount",
"aggregations": {
"MyData.MyHeader.granularity": {
"terms": {
"field": "MyData.MyHeader.granularity",
"size": 200,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_key": "asc"
}
]
},
"aggregations": {
"MyData.MyHeader.myType": {
"terms": {
"field": "MyData.MyHeader.myType",
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_key": "asc"
}
]
},
"aggregations": {
"MyData.MyBreakDown.Currency": {
"terms": {
"field": "MyData.MyBreakDown.Currency",
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_key": "asc"
}
]
},
"aggregations": {
"MyData.MyBreakDown.MyDetails.myLocalAmount": {
"terms": {
"field": "MyData.MyBreakDown.MyDetails.myLocalAmount",
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_key": "asc"
}
]
}
}
}
}
}
}
}
}
}
}