elasticsearch, получить частоту и количество элементов

У меня есть индекс с таким документом:

        {
            "_id": "6827", 
            "_index": "test", 
            "_score": 1.0,
            "_source": {
                "class": [
                    {
                        "name": "physics",
                        "grade" : [
                                12,
                                2
                            ],
                    },
                    {
                        "name": "french",
                        "grade" : [
                            4,
                            8,
                        ],
                    },
                    {
                        "name": "sport",
                        "grade": [
                            14,
                            18,
                            16
                        ]
                    }
                ]
            }, 
            "_type": "student"
        }

У студента может быть разное количество подписанных классов

Я хотел бы:

  1. знать, как распределяется номер класса (количество учеников с 1 класса, со 2 класса и т. д.)
  2. сколько раз сдается каждое занятие (я знаю все возможные занятия)

Я видел эти агрегации показателей возможны, и то, что я хочу сделать, возможно. Но я новичок в es и у меня не получилось с этим разобраться.

Может ли кто-нибудь помочь?


person Gaut    schedule 30.10.2016    source источник


Ответы (1)


Я бы предложил индексировать данные по-другому. Имейте 1 документ, который представляет учащегося, посещающего один класс. Что-то типа:

{
  studentID: 123,
  studentName: "foo bar",
  classID: 111,
  classType: "physics"
}

Это позволит вам гораздо проще выполнять агрегаты, которые вы хотите сделать.

person jhilden    schedule 30.10.2016
comment
Я только что отредактировал свой вопрос, сопоставление было не очень хорошим. В любом случае, я не могу этого сделать, это не мой экземпляр elasticsearch... - person Gaut; 31.10.2016