所以我有一个包含两个字段userid
和bank_name的索引。每次用户获得新的银行帐户时,都会插入一个userid
值和用户在其中开设帐户的银行名称。我必须使用kibana
和elasticsearch
创建一个可视化效果(让我们说一个饼图),以显示同一家银行中拥有2个以上(或4个可以更改的)银行帐户的用户总数名称。
我尝试创建子存储桶,但这给出了两件事:第一显示根据名称的值划分的银行名称的总数,第二显示每个用户在该银行拥有一个帐户的次数。我四处搜索,认为我必须在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。
答案 0 :(得分:0)
不幸的是,我不知道如何使用Kibana的本机饼形图可视化实现所需的结果-但是,要执行请求的汇总,您可以使用类似于以下内容的东西:
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可视化。