0

我正在使用 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]

4

1 回答 1

0

您需要使用术语聚合

GET /_search
{
    "aggs" : {
        "users" : {
            "terms" : { "field" : "customer_email_key" }
        }
    }
}
于 2018-05-17T10:34:33.253 回答