Well regarding JSON structure, you need to take a step back and figure out if you'd want list
or key-value
pairs.
Looking at your example, I don't think you need key-value
pairs but again its something you may want to clarify by understanding your domain if there'd be some more properties for categories
.
Regarding aggregation, as far as I know, aggregations
would work on any valid JSON structure.
For the data you've mentioned, you can make use of the below aggregation
query. Also I'm assuming the fields are of type keyword
.
Aggregation Query
POST <your_index_name>/_search
{
"size": 0,
"aggs": {
"myaggs": {
"terms": {
"size": 100,
"script": {
"inline": """
def myString = "";
def list = new ArrayList();
for(int i=0; i<doc['categories'].length; i++){
myString = doc['categories'][i] + ", " + doc['product'].value;
list.add(myString);
}
return list;
"""
}
}
}
}
}
Aggregation Response
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0,
"hits": []
},
"aggregations": {
"myaggs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "category1, productx",
"doc_count": 1
},
{
"key": "category2, productx",
"doc_count": 1
}
]
}
}
}
Hope it helps!