У меня есть гипотетический сценарий - база данных, в которой электронная почта не является уникальной, и один из пользователей дважды зарегистрировался на одну и ту же электронную почту. Я хочу выполнить агрегацию для уникальных результатов, поэтому в MySQL я бы сделал что-то похожее на приведенное ниже:
SELECT count(*) as total_users, avg(age) as average_age
FROM users
GROUP BY email
Можно ли сделать то же самое в Elastic?
Мне известно о terms
, однако, terms
будет группировать пользователей в возвращенном наборе данных и применять агрегирование в каждой группировке, т.е.
"aggregations" : {
"average_age" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "email@domain.com",
"doc_count" : 2,
"average_age" : {
"value" : 27
}
}
]
}
}
То, что я хочу, это один результат для сгруппированных данных, т. Е .:
"aggregations" : {
"average_age" : {
"average_age" : {
"value" : 33
}
}
}