【问题标题】:Nested Objects aggregations (with Kibana)嵌套对象聚合(使用 Kibana)
【发布时间】:2016-02-29 06:21:20
【问题描述】:

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

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

索引映射如下(仅重要部分):

"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,或者我做错了什么?

【问题讨论】:

    标签: elasticsearch kibana kibana-4


    【解决方案1】:

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

    请参阅从源代码here. 构建 kibana 的说明

    现在运行 kibana 构建后,它将在存储桶和指标的高级选项中包含一个 Nested Path 文本框和一个 reverse 嵌套复选框。

    这里是lines.category_1、lines.category_2、lines.category_3 和lines 是嵌套类型的嵌套术语聚合的示例。使用上面的三个桶,:

    【讨论】:

    • 嘿 ygogia,那些 github 页面现在 404,你有机会更新它们吗?
    【解决方案2】:

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

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

    【讨论】:

    • 这意味着,为了检索和可视化所有设备,我需要查询每个 device.id - 对吗?
    • @Exinferis 也许您可以简单地对device.id 进行术语聚合并将其与过滤器 agg 结合起来?
    【解决方案3】:

    Kibana 不支持嵌套 json。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 2019-08-25
      • 2020-05-10
      相关资源
      最近更新 更多