所以我有一个包含两个字段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将不会被包括在内,因为两个的银行账户都是唯一的或从未重复过。
发布于 2019-04-11 05:05:28
不幸的是,我不知道如何使用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可视化。
https://stackoverflow.com/questions/55619675
复制相似问题