Что эквивалентно группировать по и собирать как список в эластичном поиске?

У меня есть эластичность каждый индекс

{class_id: 1, student_id: 10}
{class_id: 2, student_id: 20}
{class_id: 1, student_id: 30}
{class_id: 2, student_id: 40}

Я хочу такую ​​агрегацию, чтобы

{class_id: 1, student_ids: [10,30]}
{class_id: 2, student_ids: [20,40]}

Не знаю, как это сделать

1
0
162
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам просто нужно использовать две агрегации terms, например:

{
  "size": 0,
  "aggs": {
    "classes": {
      "terms": {
        "field": "class_id"
      },
      "aggs": {
        "students": {
          "terms": {
            "field": "student_id"
          }
        }
      }
    }
  }
}

Вы получите по одному ведру для каждого класса, а внутри каждого ведра вы получите по одному ведру на каждого учащегося в этом классе.

Не уверен, что вы имеете в виду. Вы получаете ведра classes с ключами 1 и 2, и внутри каждого вы получаете ведра students с ключами 10, 30, соответственно, 20, 40. Именно то, что вы просили, или я что-то пропустил?

Val 03.05.2018 05:33

извините за это, позвольте мне попробовать, и я вернусь к вам. Спасибо за вашу помощь!

user3325210 03.05.2018 05:43

Круто, смело приму ответ, если помог, спасибо ;-)

Val 01.06.2018 22:50

Другие вопросы по теме