Java Client for Composite Aggregation using Terms queries

Hi Team,

I have created a composite query for aggregating on 2 different attributes as below -

{
    "from": 0,
    "size": 0,
    "query": {
        "bool": {
            "must": [
                {
                    "nested": {
                        "query": {
                            "script": {
                                "script": {
                                    "source": "params.territoryIds.contains(doc['territoryHierarchy.id'].value) ",
                                    "lang": "painless",
                                    "params": {
                                        "territoryIds": [
                                            12345678
                                        ]
                                    }
                                },
                                "boost": 1.0
                            }
                        },
                        "path": "territoryHierarchy",
                        "ignore_unmapped": false,
                        "score_mode": "none",
                        "boost": 1.0
                    }
                },
                {
                    "bool": {
                        "should": [
                            {
                                "nested": {
                                    "query": {
                                        "script": {
                                            "script": {
                                                "source": "doc['forecastHeaders.id'].value == params.id && doc['forecastHeaders.revenueCategory'].value == params.revenueCategory ",
                                                "lang": "painless",
                                                "params": {
                                                    "revenueCategory": 0,
                                                    "id": 987654321
                                                }
                                            },
                                            "boost": 1.0
                                        }
                                    },
                                    "path": "forecastHeaders",
                                    "ignore_unmapped": false,
                                    "score_mode": "none",
                                    "boost": 1.0
                                }
                            },
                            {
                                "nested": {
                                    "query": {
                                        "script": {
                                            "script": {
                                                "source": "doc['forecastHeaders.id'].value == params.id && doc['forecastHeaders.revenueCategory'].value == params.revenueCategory ",
                                                "lang": "painless",
                                                "params": {
                                                    "revenueCategory": 0,
                                                    "id": 987654321
                                                }
                                            },
                                            "boost": 1.0
                                        }
                                    },
                                    "path": "forecastHeaders",
                                    "ignore_unmapped": false,
                                    "score_mode": "none",
                                    "boost": 1.0
                                }
                            }
                        ],
                        "adjust_pure_negative": true,
                        "boost": 1.0
                    }
                },
                {
                    "terms": {
                        "revnWinProbability": [
                            40,
                            50
                        ],
                        "boost": 1.0
                    }
                },
                {
                    "terms": {
                        "revenueStatus.keyword": [
                            "OPEN"
                        ],
                        "boost": 1.0
                    }
                },
                {
                    "range": {
                        "recordUpdateTime":{
                            "gte":1655117440000
                        }
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1.0
        }
    },
    "version": true,
    "aggregations": {
        "TopLevelAggregation": {
            "composite" : {
                "size" : 10000,
                "sources" : [
                    {
                        "directs": {
                            "terms": {
                                "script": {
                                    "source": "def territoryNamesList = new ArrayList(); def name; def thLength = params._source.territoryHierarchy.length; for(int i = 0; i< thLength;i++) { def thRecord = params._source.territoryHierarchy[i];  if (params.territoryIds.contains(thRecord.id) && i+params.levelToReturn < thLength) { territoryNamesList.add(params._source.territoryHierarchy[i+params.levelToReturn].name);} } return territoryNamesList;",
                                    "lang": "painless",
                                    "params": {
                                        "territoryIds": [
                                            12345678
                                        ],
                                        "levelToReturn": 1
                                    }
                                }
                            }
                        }
                    },
                    {
                        "qtr" : {
                            "terms" : {
                                "field" : "quarter.keyword",
                                "missing_bucket" : false,
                                "order" : "asc"
                            }
                        }
                    }
                ]
            },
            "aggregations": {
                "revnRevenueAmount": {
                    "sum": {
                        "script": {
                            "source": "doc['revenueTypeCategory.keyword'].value != 'Other' ? doc['revnRevenueAmount']:doc['revnRevenueAmount']",
                            "lang": "painless"
                        },
                        "value_type": "long"
                    }
                }
            }
        }
    }
}

So this query returns the result properly.

I am trying to create a corresponding java implementation for it. So I have created the code as below -

BoolQueryBuilder baseQueryBuilder = getQueryBuilder(searchCriteria);

List<TermsAggregationBuilder> aggregationBuilders = getMultiBaseAggregationBuilders(searchCriteria, baseQueryBuilder);

Where the getMultiBaseAggregationBuilders returns the 2 different terms aggregations shown in the query above - directs and qtr. Now I am not finding any API to send this list of terms aggregations to the composite aggregation builder. Would be really grateful if someone can give me a pointer as to how this list of terms aggregations can be used inside the composite aggregation builder. Thanks in advance!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.