Как диверсифицировать результат агрегации топ-хитов? - PullRequest
0 голосов
/ 29 сентября 2019

Начнем с конкретного примера.У меня есть документ с этими полями:

{
  "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 агрегация не может принимать субагрегации, так как мне решить вопрос?

...