Агрегатор типа [сумма] не может принимать субагрегации - PullRequest
0 голосов
/ 22 апреля 2020

Я использую клиент высокого уровня rest и получаю вышеупомянутое исключение, но отлично работает от почтальона, вот исходный код java, и он построен с использованием клиента высокого уровня rest.

с подозрением на последние три суммы агрегации вызывают проблему, пожалуйста, исправьте меня, если порядок неправильный в конструкции запроса кода java.

AggregationBuilder рекомендацияDataAgg = AggregationBuilders.nested ("рекомендации", "events.recommendationData");

AggregationBuilder exceptionIdAgg = AggregationBuilders
        .filter("exceptionId",
                QueryBuilders.termsQuery("events.recommendationData.exceptionId", exactMatchThese));

AggregationBuilder itemAgg = AggregationBuilders.terms("by_item").field("events.recommendationData.item.keyword");
AggregationBuilder destinationAgg = AggregationBuilders.terms("by_destination").field("events.recommendationData.location.keyword");
AggregationBuilder recommendationsAgg = AggregationBuilders.nested("recommendations", "events.recommendationData.recommendations");
AggregationBuilder transportAgg = AggregationBuilders.terms("by_trans").field("events.recommendationData.recommendations.stockTransfer.transportMode.keyword");
AggregationBuilder sourceAgg = AggregationBuilders.terms("by_sourcelocation").field("events.recommendationData.recommendations.stockTransfer.sourceLocation.keyword");
AggregationBuilder shipDateAgg = AggregationBuilders.terms("by_shipdate").field("events.recommendationData.recommendations.stockTransfer.shipDate.keyword");
AggregationBuilder arrivalDateAgg = AggregationBuilders.terms("by_arrival").field("events.recommendationData.recommendations.stockTransfer.arrivalDate.keyword");
AggregationBuilder quantityAgg = AggregationBuilders.sum("quantity").field("events.recommendationData.recommendations.stockTransfer.transferQuantity");
AggregationBuilder transfercostAgg = AggregationBuilders.sum("transfercost").field("events.recommendationData.recommendations.stockTransfer.transferCost");
AggregationBuilder revenueAgg = AggregationBuilders.sum("revenueRecovered").field("events.recommendationData.recommendations.stockTransfer.revenueRecovered");
arrivalDateAgg =  recommendationDataAgg.subAggregation(
        exceptionIdAgg.subAggregation(itemAgg.subAggregation(destinationAgg.subAggregation(recommendationsAgg
                .subAggregation(transportAgg.subAggregation(
                        sourceAgg.subAggregation(shipDateAgg.subAggregation(arrivalDateAgg))))))));

AggregationBuilder aggregation = arrivalDateAgg
        .subAggregation(quantityAgg)
        .subAggregation(transfercostAgg)
        .subAggregation(revenueAgg);

searchSourceBuilder.aggregation(aggregation);

searchRequest.source(searchSourceBuilder);

Это рабочий запрос от почтальона

{
    "aggs": {
        "recommendations": {
            "nested": {
                "path": "events.recommendationData"
            },
            "aggs": {
                "exception": {
                    "filter": {
                        "terms": {
                            "events.recommendationData.exceptionId": [
                                "1"
                            ]
                        }
                    },
                    "aggs": {
                        "by_item": {
                            "terms": {
                                "field": "events.recommendationData.item.keyword"
                            },
                            "aggs": {
                                "by_destination": {
                                    "terms": {
                                        "field": "events.recommendationData.location.keyword"
                                    },
                                    "aggs": {
                                        "recommendations": {
                                            "nested": {
                                                "path": "events.recommendationData.recommendations"
                                            },
                                            "aggs": {
                                                "by_trans": {
                                                    "terms": {
                                                        "field": "events.recommendationData.recommendations.stockTransfer.transportMode.keyword"
                                                    },
                                                    "aggs": {
                                                        "by_sourcelocation": {
                                                            "terms": {
                                                                "field": "events.recommendationData.recommendations.stockTransfer.sourceLocation.keyword"
                                                            },
                                                            "aggs": {
                                                                "by_shipdate": {
                                                                    "terms": {
                                                                        "field": "events.recommendationData.recommendations.stockTransfer.shipDate.keyword"
                                                                    },
                                                                    "aggs": {
                                                                        "by_arrival": {
                                                                            "terms": {
                                                                                "field": "events.recommendationData.recommendations.stockTransfer.arrivalDate.keyword"
                                                                            },
                                                                            "aggs": {
                                                                                "quantity": {
                                                                                    "sum": {
                                                                                        "field": "events.recommendationData.recommendations.stockTransfer.transferQuantity"
                                                                                    }
                                                                                },
                                                                                "transferCost": {
                                                                                    "sum": {
                                                                                        "field": "events.recommendationData.recommendations.stockTransfer.transferCost"
                                                                                    }
                                                                                },
                                                                                "revenueRecovered": {
                                                                                    "sum": {
                                                                                        "field": "events.recommendationData.recommendations.stockTransfer.revenueRecovered"
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Это отображение

{
    "mappings": {
        "recommendations": {
            "properties": {
                "events": {
                    "type": "nested",
                    "properties": {
                        "recommendationData": {
                            "type": "nested",
                            "properties": {
                                "recommendations": {
                                    "type": "nested",
                                    "properties": {
                                        "recommendationType": {
                                            "type": "keyword"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Это документ

{
    "clusterId": "1",
    "rank": 1,
    "events": [
        {
            "eventId": "2",
            "eventType": "Delayed",
            "metaInfo": {
                "batch_id": "batch_1"
            },
            "recommendationData": [
                {
                    "exceptionId": "1",
                    "item": "KitKat",
                    "location": "DC1",
                    "dueDate": "2019-01-10T05:30:00.000+0530",
                    "quantity": 100,
                    "metaInfo": {
                        "batch_id": "batch_1",
                        "dummy_id": "dummy_1"
                    },
                    "rank": 1,
                    "recommendations": [
                        {
                            "rank": 1,
                            "recommendationType": "Out Of Stock",
                            "customerName": "Walmart",
                            "stockTransfer": {
                                "primaryRecommendation": true,
                                "priority": 1,
                                "sourceLocation": "DC1",
                                "transferQuantity": 100,
                                "metaInfo": 40,
                                "shipDate": "01/01/2020",
                                "arrivalDate": "10/01/2020",
                                "transportMode": "Air",
                                "transferCost": 1000,
                                "maxQtyAvailableForTransfer": 40,
                                "totalQtyAtSource": 1,
                                "revenueRecovered": 12000
                            },
                            "expedite": null
                        },
                        {
                            "rank": 1,
                            "recommendationType": "Out Of Stock",
                            "customerName": "Walmart",
                            "stockTransfer": {
                                "primaryRecommendation": true,
                                "priority": 1,
                                "sourceLocation": "DC1",
                                "transferQuantity": 100,
                                "metaInfo": 40,
                                "shipDate": "01/01/2020",
                                "arrivalDate": "10/01/2020",
                                "transportMode": "Air",
                                "transferCost": 1000,
                                "maxQtyAvailableForTransfer": 40,
                                "totalQtyAtSource": 1,
                                "revenueRecovered": 12000
                            },
                            "expedite": null
                        },
                        {
                            "rank": 1,
                            "recommendationType": "Out Of Stock",
                            "customerName": "Walmart",
                            "stockTransfer": {
                                "primaryRecommendation": true,
                                "priority": 1,
                                "sourceLocation": "DC1",
                                "transferQuantity": 100,
                                "metaInfo": 40,
                                "shipDate": "01/01/2020",
                                "arrivalDate": "10/01/2020",
                                "transportMode": "Air",
                                "transferCost": 1000,
                                "maxQtyAvailableForTransfer": 40,
                                "totalQtyAtSource": 1,
                                "revenueRecovered": 12000
                            },

                            "expedite": null
                        },  {
                            "rank": 1,
                            "recommendationType": "Out Of Stock",
                            "customerName": "Walmart",
                            "stockTransfer": {
                                "primaryRecommendation": true,
                                "priority": 1,
                                "sourceLocation": "DC1",
                                "transferQuantity": 100,
                                "metaInfo": 40,
                                "shipDate": "01/01/2020",
                                "arrivalDate": "10/01/2020",
                                "transportMode": "Road",
                                "transferCost": 1000,
                                "maxQtyAvailableForTransfer": 40,
                                "totalQtyAtSource": 1,
                                "revenueRecovered": 12000
                            },
                            "expedite": null
                        },
                        {
                            "rank": 1,
                            "recommendationType": "Out Of Stock",
                            "customerName": "Walmart",
                            "stockTransfer": {
                                "primaryRecommendation": true,
                                "priority": 1,
                                "sourceLocation": "DC1",
                                "transferQuantity": 100,
                                "metaInfo": 40,
                                "shipDate": "01/01/2020",
                                "arrivalDate": "10/01/2020",
                                "transportMode": "Rail",
                                "transferCost": 1000,
                                "maxQtyAvailableForTransfer": 40,
                                "totalQtyAtSource": 1,
                                "revenueRecovered": 12000
                            },
                            "expedite": null
                        }
                    ]
                }
            ]
        }
    ]
}

1 Ответ

1 голос
/ 22 апреля 2020

Действительно, последние три суммирования суммируются неправильно. Вам необходимо добавить их все в arrivalDateAgg агрегацию

...
arrivalDateAgg
   .subAggregation(quantityAgg)
   .subAggregation(transfercostAgg)
   .subAggregation(revenueAgg)
...