elasticsearch - 具有多个字段值 (bank_name) 的字段 (userid) 的 Kibana 聚合可视化

标签 elasticsearch kibana

所以我有一个包含两个字段的索引 userid和银行名称。每次用户获得一个新的银行账户时,都会插入一个带有 userid 的值。以及用户开户的银行名称。我必须使用 kibanaelasticsearch创建一个可视化(比如说一个饼图),显示在同一银行名称中拥有超过 2 个(或 4 个这可以更改)银行账户的所有用户计数。

我曾尝试创建子存储桶,但这提供了两件事,第一件事显示根据其值(value)划分的银行名称的总数,第二件事显示每个用户在该银行拥有账户的次数。我四处搜索,认为我必须在 aggs 中的某处使用 sub_doc_count,但不知道在哪里或如何这样做。

例如,对于以下数据:

[{
  "_id": 10001,
  "userid": 0,
  "bank_name": "xyz bank",
  "date": "2019-01-23"
},
 {
   "_id": 10002,
   "userid": 0,
   "bank_name": "abc bank",
   "date": "2019-01-29"
 },
 {
   "_id": 10003,
   "userid": 1,
   "bank_name": "xyz bank",
   "date": "2019-01-31"
 },
 {
   "_id": 10004,
   "userid": 2,
   "bank_name": "def bank",
   "date": "2019-02-02"
 },
 {
   "_id": 10005,
   "userid": 2,
   "bank_name": "abc bank",
   "date": "2019-02-03"
 },
 {
   "_id": 10006,
   "userid": 1,
   "bank_name": "xyz bank",
   "date": "2019-02-10"
 },
 {
   "_id": 10007,
   "userid": 1,
   "bank_name": "abc bank",
   "date": "2019-02-14"
 },
 {
   "_id": 10008,
   "userid": 0,
   "bank_name": "abc bank",
   "date": "2019-02-20"
 },
 {
   "_id": 10009,
   "userid": 0,
   "bank_name": "xyz bank",
   "date": "2019-02-20"
 }]

因此,对于上面应该得到一个只有两个用户的饼图:0 和 1,其中 0 的计数为 #2,1 的计数为 #1。用户 2 将不包括在内,因为两个人的银行账户都是唯一的或从不重复。

最佳答案

不幸的是,我不知道如何使用 Kibana 的 native 饼图可视化来实现所需的结果 - 但是,要执行请求的聚合,您可以使用类似于以下内容的内容:

GET bank_users/_search
{
  "size": 0,
  "aggs": {
    "accounts_per_user": {
      "terms": {
        "field": "userid"
      },
      "aggs": {
        "accounts_per_bank": {
          "terms": {
            "field": "bank_name.keyword"
          },
          "aggs": {
            "filtered_banks": {
              "bucket_selector": {
                "buckets_path": {
                  "accounts": "_count"
                },
                "script": "params.accounts >= 2"
              }
            }
          }
        }
      }
    }
  }
}

这将从您的示例数据集中返回以下内容:
{
  "took" : 7,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 9,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "accounts_per_user" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : 0,
          "doc_count" : 4,
          "accounts_per_bank" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "abc bank",
                "doc_count" : 2
              },
              {
                "key" : "xyz bank",
                "doc_count" : 2
              }
            ]
          }
        },
        {
          "key" : 1,
          "doc_count" : 3,
          "accounts_per_bank" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "xyz bank",
                "doc_count" : 2
              }
            ]
          }
        },
        {
          "key" : 2,
          "doc_count" : 2,
          "accounts_per_bank" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [ ]
          }
        }
      ]
    }
  }
}

注意这是使用默认 terms聚合因此请注意限制(即并非所有文档都可以检索,导致对具有高基数和低 size 参数的大型数据集的计数不准确 - ref: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html )。

您可以利用它来创建 Vega 可视化。

关于elasticsearch - 具有多个字段值 (bank_name) 的字段 (userid) 的 Kibana 聚合可视化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55619675/

相关文章:

python - 检索 Kibana 中的额外字段

elasticsearch - 了解elasticsearch查询说明

elasticsearch - 读取字段 'topic_metadata'时出错:读取大小为873589的数组时出错,仅提供41个字节

elasticsearch - 删除旧索引elasticsearch?

elasticsearch - Logstash 不解析 json

elasticsearch - 如何在Elasticsearch上更改字段类型而不停止我的服务?

elasticsearch - elasticsearch如何处理脚本化更新查询中的返回?

elasticsearch - Elasticsearch 更新映射

elasticsearch - Elasticsearch Score文档按相同字段值

elasticsearch - 将JSON转换为Elastic NEST查询无法正常工作