elasticsearch 使用过滤器对Kibana/Visualize中的值进行计数?
(我对麋鹿堆还不熟悉,可能会问一些明显的问题……) 我有描述客户信息的文件,包括姓名、地址、年龄等数据。。。 有时,并非所有这些字段都存在,我想知道填写这些字段的文档数量 如果数据如下所示:elasticsearch 使用过滤器对Kibana/Visualize中的值进行计数?,elasticsearch,kibana,elasticsearch,Kibana,(我对麋鹿堆还不熟悉,可能会问一些明显的问题……) 我有描述客户信息的文件,包括姓名、地址、年龄等数据。。。 有时,并非所有这些字段都存在,我想知道填写这些字段的文档数量 如果数据如下所示: PUT customers { "mappings": { "customer": { "properties": { "id": { "type": "integer" }, "category": {
PUT customers
{
"mappings": {
"customer": {
"properties": {
"id": {
"type": "integer"
},
"category": {
"type": "keyword"
},
"email": {
"type": "text"
},
"age": {
"type": "integer"
},
"address": {
"type": "text"
}
}
}
}
}
POST _bulk
{"index":{"_index":"customers","_type":"customer"}}
{"id":"1","category":"aa","email":"sam@test.com"}
{"index":{"_index":"customers","_type":"customer"}}
{"id": "2", "category" : "aa", "age": "5"}
{"index":{"_index":"customers","_type":"customer"}}
{"id": "3", "category" : "aa", "email": "bob@test.com", "age": "36"}
{"index":{"_index":"customers","_type":"customer"}}
{"id": "4", "category" : "bb", "email": "kim@test.com", "age": "42", "address": "london"}
想法是在Kibana中可视化一个数据表,如:
+----------+-------+-------+-----+---------+
| category | total | email | age | address |
+----------+-------+-------+-----+---------+
| aa | 3 | 2 | 2 | 0 |
| bb | 1 | 1 | 1 | 1 |
+----------+-------+-------+-----+---------+
(例如:我们有3位“aa”类客户;其中2位给出了他们的电子邮件,2位给出了他们的年龄,没有一位给出了地址)
我可以通过以下查询了解如何做到这一点:
POST /customers/_search?size=0
{
"aggs": {
"category": {
"terms": {
"field": "category"
},
"aggs": {
"count_email": {
"filter": {
"exists": {
"field": "email"
}
}
},
"count_age": {
"filter": {
"exists": {
"field": "age"
}
}
},
"count_address": {
"filter": {
"exists": {
"field": "address"
}
}
}
}
}
}
}
但我找不到在Kibana如何做到这一点。
我应该使用脚本字段吗?JSON输入?怎样?有更好的办法吗
谢谢您的建议。在UI中,我可以使用关键字术语过滤器拆分行 下面是一个让你开始的url 该调用将创建一个数据表,按计数聚合,并按类别关键字项拆分行
http://localhost:5601/app/kibana#/visualize/create?type=table&indexPattern=customers&_g=()&_a=(filters:!(),linked:!f,query:(query_string:(analyze_wildcard:!t,query:'*')),uiState:(vis:(params:(sort:(columnIndex:!n,direction:!n)))),vis:(aggs:!((enabled:!t,id:'1',params:(),schema:metric,type:count),(enabled:!t,id:'2',params:(field:category.keyword,order:desc,orderBy:_term,size:2),schema:bucket,type:terms)),listeners:(),params:(perPage:10,showMeticsAtAllLevels:!f,showPartialRows:!f,showTotal:!f,sort:(columnIndex:!n,direction:!n),totalFunc:sum),title:'CategoryTable',type:table))
在UI中,我能够使用关键字术语过滤器分割行 下面是一个让你开始的url 该调用将创建一个数据表,按计数聚合,并按类别关键字项拆分行
http://localhost:5601/app/kibana#/visualize/create?type=table&indexPattern=customers&_g=()&_a=(filters:!(),linked:!f,query:(query_string:(analyze_wildcard:!t,query:'*')),uiState:(vis:(params:(sort:(columnIndex:!n,direction:!n)))),vis:(aggs:!((enabled:!t,id:'1',params:(),schema:metric,type:count),(enabled:!t,id:'2',params:(field:category.keyword,order:desc,orderBy:_term,size:2),schema:bucket,type:terms)),listeners:(),params:(perPage:10,showMeticsAtAllLevels:!f,showPartialRows:!f,showTotal:!f,sort:(columnIndex:!n,direction:!n),totalFunc:sum),title:'CategoryTable',type:table))
这张桌子不合适吗?结果如何?我更新了答案,加入了kibana的起始url。。。这更接近你需要的吗?这没有给你合适的桌子吗?结果如何?我更新了答案,加入了kibana的起始url。。。这更接近你需要的吗?谢谢你的回答。为了避免误解,我用索引描述更新了问题。实际上没有数组数据类型(这似乎是
嵌套的类型有用的情况)。。。通过更改,我看不出您的代码有任何问题。你得到了什么结果?请给我几分钟时间安装堆栈,我将设置您的场景我在问题中输入的搜索查询给出了预期的结果,但我的问题是能否在Kibana/Visualize中重现该结果。我正在使用您的数据集玩可视化工具。似乎您要使用拆分行。。我不确定这在json中看起来如何,但它会根据类别正确地分割数据。关键字按类别分割数据以获得文档数量是可以的。问题是如何获取emal不为null、年龄不为null、地址不为null的文档的总数(请参见问题中的表格示例)。请点击Thx以获取答案。为了避免误解,我用索引描述更新了问题。实际上没有数组数据类型(这似乎是嵌套的类型有用的情况)。。。通过更改,我看不出您的代码有任何问题。你得到了什么结果?请给我几分钟时间安装堆栈,我将设置您的场景我在问题中输入的搜索查询给出了预期的结果,但我的问题是能否在Kibana/Visualize中重现该结果。我正在使用您的数据集玩可视化工具。似乎您要使用拆分行。。我不确定这在json中看起来如何,但它会根据类别正确地分割数据。关键字按类别分割数据以获得文档数量是可以的。问题是如何获取emal不为null、年龄不为null、地址不为null的文档的总数(请参见问题中的表格示例)。