所以我有一个包含两个字段的索引 userid
和银行名称。每次用户获得一个新的银行账户时,都会插入一个带有 userid
的值。以及用户开户的银行名称。我必须使用 kibana
和 elasticsearch
创建一个可视化(比如说一个饼图),显示在同一银行名称中拥有超过 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/