我的资料{ "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" } } } } }}'
但是,我检索到一个空桶。
我该怎么办?
谢谢!
最佳答案
ES聚合是基于文档的,这意味着您可以使用存储桶聚合对文档中的字段进行分组,然后在每个存储桶中进一步聚合为另一个文档字段上的嵌套聚合。您可以使用脚本以新颖的方式组合文档字段,但是我从未见过能够汇总存储桶数量或存储桶中文档数量的功能。
我唯一知道像group_by_street>_count
这样的路径符号的地方是将嵌套聚合中的排序路径指定为documented here。
我建议您从术语聚合结果创建直方图客户端。在某种程度上,术语汇总已经是历史,因为它可以直接告诉您每个术语具有的文档数。您只需要以对您有意义的方式订购每个存储区元组(条件,doc_count)。我不确定您是否可以直接在kibana中执行此操作。
关于elasticsearch - 根据聚合结果构建直方图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40173676/