Агрегация диапазонов ElasticSearch с фильтром - PullRequest
0 голосов
/ 08 июля 2020

Я использую elasti c search 6.4.

У меня есть документ класса со структурой, подобной этой, где у меня есть подробная информация о классе со списком учителей и силой этого класса. Роль учителя может быть ЛЕКТОР для одного класса и GUEST_LECTURER для другого. В основном это то, что я пытаюсь найти. Учитывая учитель_id, я хочу знать

  1. , сколько классов он преподает в качестве лектора и для каждого диапазона силы (<5, <50, <20, <100,> 100)
  2. Сколько классов он преподает как GUEST_LECTURER и для каждого диапазона силы (<5, <50, <20, <100,> 100). Любой
    {
        "id": "1",
        "teachers": [{
            "id": 5,
            "name": "Gaurav"
            "role": LECTURER
        }, {
            "id": 4,
            "name": "Ranjith"
            "role": GUEST_LECTURER
        }],
        "strength": 10
    }

Я могу выполнить агрегацию диапазона с запросом. Но не могу найти количество документов по каждой роли

{
    "query": {
        "nested" : {
            "path" : "teachers",
            "query" : {
                "bool" : {
                    "must" : [
                    { "term" : {"teachers.id" : 5} }
                    ]
                }
            }
        }
    },
    "aggs": {
        "classes_by_strength" : {
            "range" : {
                "field" : "strength",
                "ranges" : [
                    { "to" : 5 },
                    { "from" : 5, "to" : 21 },
                    { "from" : 21, "to": 51 },
                    {"from":51, "to": 101},
                    {"from": 101}
                ]
            }
        }
    }
}

Не могли бы вы посоветовать мне, какой тип агрегирования лучше всего я могу использовать для этого?

...