Начнем с конкретного примера.У меня есть документ с этими полями:
{
"template": {
"mappings": {
"template": {
"properties": {
"tid": {
"type": "long"
},
"folder_id": {
"type": "long"
},
"status": {
"type": "integer"
},
"major_num": {
"type": "integer"
}
}
}
}
}
}
Я хочу агрегировать результат запроса по полю folder_id
, и для каждой группы, разделенной на folder_id
, получить документы из топ-N '_source
подробно.Поэтому я пишу DSL-запрос следующим образом:
GET /template/template/_search
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"term": {
"status": 1
}
}
]
}
},
"aggs": {
"folder": {
"terms": {
"field": "folder_id",
"size": 10
},
"aggs": {
"top_hit":{
"top_hits": {
"size": 5,
"_source": ["major_num"]
}
}
}
}
}
}
Однако теперь возникает требование о том, что самые популярные документы для каждого folder_id
должны быть диверсифицированы в поле major_num
.Для каждого folder_id
документы с наибольшим количеством совпадений, полученные с помощью агрегации top_hits
при агрегации terms
, должны быть уникальными в поле major_num
, а для каждого значения major_num
возвращать не более 1 документа в суб.результат агрегации по числу попаданий.
top_hits
агрегация не может принимать субагрегации, так как мне решить вопрос?