ElasticSearch Отсутствует определение для агрегации [unique_users] Ошибка
Я использую ES с Ruby on Rails, я нахожусь в ситуации, когда мне приходится перечислять всех уникальных пользователей, поэтому ниже приведен код, который я использую для его получения.
buckets['unique_users'] = {
filter: { match_all: {} },
aggregations: {
users_count: {
cardinality: {
field: :customer_email_key
}
}
}
}
и ниже ответ:
unique_users: {
doc_count: 134,
users_count: {
value: 125
}
}
}
Это показывает только количество уникальных пользователей, но в этом запросе не отображается список адресов электронной почты, поэтому проблема в этом запросе. Кто-нибудь может направить меня?
========== New Edits ==========
Теперь я использую код, и он отлично работает с списком пользователей, и он считается.
def buckets_for_unique_users(buckets, aggregations)
buckets['unique_users'] = {
filter: { match_all: {} },
aggregations: {
users_count: {
cardinality: {
field: :customer_email_key
}
},
details: {
terms: {
field: :customer_email_key,
size: 200
}
}
}
}
end
Теперь ответ выше кода:
unique_users: {
doc_count: 134,
users_count: {
value: 125
},
details: {
doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [
{
key: "example@gmail.com",
doc_count: 2
}
{....}
]
}
Теперь все идет отлично, но в ответе есть что-то, что немного сбивает с толку, поэтому я должен удалить это, то есть doc_count: 134, потому что я хочу сохранить users_count и удалить doc_count. Поэтому для этого я удалил фильтр: { match_all: {} } из метода, а затем получил ошибку Missing definition for aggregation [unique_users]
1 ответ
Вам необходимо использовать термины агрегации:
GET /_search
{
"aggs" : {
"users" : {
"terms" : { "field" : "customer_email_key" }
}
}
}