根据聚合结果构建直方图

时间:2016-10-21 10:00:10

标签: elasticsearch kibana

我的数据

{ "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" } } } } } }'

但是,我检索了一个空桶。

我知道怎么办?

谢谢!

1 个答案:

答案 0 :(得分:0)

  

我想根据“group_by_street”聚合的“doc_count”字段构建直方图

ES聚合是基于文档的,这意味着您可以使用存储桶聚合按文档上的字段进行分组,然后在每个存储桶内进一步聚合,作为另一个文档字段的嵌套聚合。您可以使用脚本以新颖的方式组合文档字段,但我从来没有看到过汇总桶数桶中文档数的功能。

我唯一知道像group_by_street>_count这样的路径表示法的地方是将嵌套聚合中的排序路径指定为documented here

我建议您从术语聚合结果创建直方图客户端。在某种程度上,聚合这个术语已经是历史记录,因为它直接告诉您每个术语的文档数量。您只需要以对您有意义的方式订购每个桶元组(term,doc_count)。我不确定你是否可以直接在kibana中这样做。