嵌套对象聚合(使用Kibana)

时间:2015-11-26 08:33:48

标签: elasticsearch kibana kibana-4

我们得到了一个Elasticsearch索引,其中包含带有称为devices的任意嵌套对象子集的文档。这些设备中的每一个都有一个关键呼叫" aw"。 我试图完成的是获得每种设备类型的aw密钥的平均值。 在尝试聚合并可视化此平均值时,我不会获得每种设备类型的aw的平均值,而是包含特定设备的文档中的所有设备的平均值。

因此,Elasticsearch / Kibana不会获取device.id=7所有文档并聚合awdevice.id,而是获取包含device.id=7的所有文档,然后构建它平均使用文档中的所有设备。

Out索引映射看起来像这样(只有重要部分):

"mappings" : {
        "devdocs" : {
            "_all": { "enabled": false },
            "properties" : {
                "cycle": {
                    "type": "object",
                    "properties": {
                        "t": {
                            "type": "date",
                            "format": "dateOptionalTime||epoch_second"
                        }
                    }
                },
                "devices": {
                    "type": "nested",
                    "include_in_parent": true,
                    "properties": {
                        "name": {
                            "type": "string",
                            "index": "not_analyzed"
                        },
                        "aw": {
                            "type": "long"
                        }
                        "t": {
                            "type": "date",
                            "format": "dateOptionalTime||epoch_second"
                        },

                    }
                }

            }
        }

Kibana生成以下查询:

{
  "size": 0,
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "analyze_wildcard": true,
          "query": "*"
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "cycle.t": {
                  "gte": 1290760324744,
                  "lte": 1448526724744,
                  "format": "epoch_millis"
                }
              }
            }
          ],
          "must_not": []
        }
      }
    }
  },
  "aggs": {
    "2": {
      "terms": {
        "field": "devices.name",
        "size": 35,
        "order": {
          "1": "desc"
        }
      },
      "aggs": {
        "1": {
          "avg": {
            "field": "devices.aw"
          }
        }
      }
    }
  }
}

有没有办法在设备级别汇总平均aw,或者我做错了什么?

3 个答案:

答案 0 :(得分:1)

Kibana还不支持嵌套聚合Nested Aggregations Issue。 我遇到了同样的问题,并通过用户fork从这个ppadovani的src构建kibana来解决它。 [branch:nestedAggregations]

请参阅从源here.

构建kibana的说明

现在,当您运行kibana时,它将包含一个嵌套路径文本框和一个反向嵌套复选框,用于存储桶和指标的高级选项。

以下是在lines.category_1,lines.category_2,lines.category_3和嵌套类型的行上嵌套术语聚合的示例。使用上面的三个桶,Kibana Nested Aggregations

答案 1 :(得分:0)

我建议添加filter aggregation以保留所有内容aw: 7

  

定义当前文档中所有文档的单个存储桶   设置与指定过滤器匹配的上下文。通常这将被用于   将当前聚合上下文缩小到特定的一组   文档。

答案 2 :(得分:0)

Kibana不支持嵌套json。