我的资料
{ "city":"New York", "street":"Atlantic Avenue" }
{ "city":"New York", "street":"Hudson Street" }
{ "city":"New York", "street":"Fawn Court" }
{ "city":"Boston", "street":"Atlantic Avenue" }
{ "city":"Boston", "street":"Hudson Street" }
{ "city":"Boston", "street":"7th Avenue" }
{ "city":"Washington DC", "street":"Atlantic Avenue" }
{ "city":"Washington DC", "street":"Dogwood Drive" }
{ "city":"Washington DC", "street":"7th Avenue" }
如果我们计算一条街道出现的每次时间,则会得到以下信息:
| Street name | Number of times |
|-----------------|-----------------|
| Atlantic Avenue | 3 |
| Hudson Street | 2 |
| 7th Avenue | 2 |
| Hudson Street | 1 |
| Dogwood Drive | 1 |
我的目标
我想建立一个直方图,说明有多少个街道名称是唯一的,有多少个街道名称被两次看到,等等。
为此,我应该获取条款汇总的结果,并将其发送到直方图汇总。
这是上面示例的结果:
| Street name count | Number of times |
|-------------------|-----------------|
| 1 | 2 |
| 2 | 2 |
| 3 | 1 |
我已经做了什么
我已经用Kibana和这个查询建立了第一个表:
curl -XGET 'http://localhost:9200/index1/type1/_search?pretty' -d '
{
"size": 0,
"aggs": {
"group_by_street": {
"terms": {
"field": "street"
}
}
}
}'
然后,我尝试将此结果添加到直方图中:
curl -XGET 'http://localhost:9200/fingerprint/user/_search?pretty' -d '
{
"size": 0,
"aggs": {
"histogram_streets": {
"histogram": {
"field": "group_by_street>_count",
"interval": 1
},
"aggs": {
"group_by_street": {
"terms": {
"field": "street"
}
}
}
}
}
}'
但是,我检索到一个空桶。
我该怎么办?
谢谢!
最佳答案
I want to build the histogram based on the "doc_count" field of the "group_by_street" aggregation
ES聚合是基于文档的,这意味着您可以使用存储桶聚合对文档中的字段进行分组,然后在每个存储桶中进一步聚合为另一个文档字段上的嵌套聚合。您可以使用脚本以新颖的方式组合文档字段,但是我从未见过能够汇总存储桶数量或存储桶中文档数量的功能。
我唯一知道像
group_by_street>_count
这样的路径符号的地方是将嵌套聚合中的排序路径指定为documented here。我建议您从术语聚合结果创建直方图客户端。在某种程度上,术语汇总已经是历史,因为它可以直接告诉您每个术语具有的文档数。您只需要以对您有意义的方式订购每个存储区元组(条件,doc_count)。我不确定您是否可以直接在kibana中执行此操作。
关于elasticsearch - 根据聚合结果构建直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40173676/