ElasticSearch缺少聚合定义[unique_users]错误

时间:2018-05-17 09:48:34

标签: elasticsearch aggregation elasticsearch-rails elasticsearch-model

  

我在Ruby on Rails上使用ES,我遇到了这种情况   列出所有唯一用户,以下是我用来获取它的代码。

    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 个答案:

答案 0 :(得分:0)

您需要使用terms aggregation

GET /_search
{
    "aggs" : {
        "users" : {
            "terms" : { "field" : "customer_email_key" }
        }
    }
}