我们得到了一个Elasticsearch索引,其中包含带有称为devices的任意嵌套对象子集的文档。这些设备中的每一个都有一个关键呼叫" aw"。
我试图完成的是获得每种设备类型的aw
密钥的平均值。
在尝试聚合并可视化此平均值时,我不会获得每种设备类型的aw
的平均值,而是包含特定设备的文档中的所有设备的平均值。
因此,Elasticsearch / Kibana不会获取device.id=7
所有文档并聚合aw
每device.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
,或者我做错了什么?
答案 0 :(得分:1)
Kibana还不支持嵌套聚合Nested Aggregations Issue。 我遇到了同样的问题,并通过用户fork从这个ppadovani的src构建kibana来解决它。 [branch:nestedAggregations]
请参阅从源here.
构建kibana的说明现在,当您运行kibana时,它将包含一个嵌套路径文本框和一个反向嵌套复选框,用于存储桶和指标的高级选项。
以下是在lines.category_1,lines.category_2,lines.category_3和嵌套类型的行上嵌套术语聚合的示例。使用上面的三个桶,
答案 1 :(得分:0)
我建议添加filter aggregation以保留所有内容aw: 7
。
定义当前文档中所有文档的单个存储桶 设置与指定过滤器匹配的上下文。通常这将被用于 将当前聚合上下文缩小到特定的一组 文档。
答案 2 :(得分:0)
Kibana不支持嵌套json。