我试图做一个查询来生成一个情节。我的数据指标如下:是否可以在父聚合定义的字段上执行elasticsearch嵌套统计信息聚合?
"mappings": {
"mydata": {
"properties": {
"type": { "type": "string", "index": "not_analyzed" },
"stamp": { "type": "date", "format": "date_hour_minute_second_millis" },
"data": { "type": "object" }
}
}
根据类型,数据字段将包含不同的对象,例如,
temperature_data = {
"type": "temperature",
"stamp": "2015-11-01T15:25:19.123",
"data": {"temperature": 23.4, "variance": 0.0}
}
humidity_data = {
"type": "humidity",
"stamp": "2015-11-01T15:26:21.063",
"data": {"humidity": 75.1, "variance": 0.0}
}
我试图聚集在根据其类型水桶数据,然后执行日期直方图以获取每个读数的统计数据(温度,湿度)。我的问题是如何设置字段上的统计AGGS,因为它与类型的变化("type": "temperature"
领域是data.temperature
为例):
query = {
"size": 0,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{"range" : {
"stamp" : {
"gt" : start_stamp,
"lt" : end_stamp
}
}}
]
}
}
}
},
"aggs": {
"pathes": {
"terms": {
"field": "type"
},
"aggs": {
"points": {
"date_histogram": {
"field": "stamp",
"interval": interval
},
"aggs": {
"point_stats": {
"stats": {
"field": "data."+field???
}
}
}
}
}
}
}
}
* UPDATE *
至于建议我添加了一个data-type.groovy文件到config/scripts /,该文件包含以下内容:
return doc['data.temperature'].value
Elasticsearc h是能够编译脚本:
[2015-11-02 19:50:32,651][INFO ][script] [Atum] compiling script file [/home/user/elasticsearch-1.7.0/config/scripts/data-type.groovy]
我更新了查询加载脚本文件:
query = {
"size": 0,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{"range" : {
"stamp" : {
"gt" : start_stamp,
"lt" : end_stamp
}
}}
]
}
}
}
},
"aggs": {
"pathes": {
"terms": {
"field": "type"
},
"aggs": {
"points": {
"date_histogram": {
"field": "stamp",
"interval": interval
},
"aggs": {
"point_stats": {
"stats": {
"script": {"file": "data-type"}
}
}
}
}
}
}
}
}
当我运行查询我得到以下输出:
{u'status': 400, u'error': u'SearchPhaseExecutionException[Failed to execute phase [query], ... Parse Failure [Unexpected token START_OBJECT in [point_stats].]]; }]'}
数据库中只有温度数据,如果我更改“script”:{“file”:“data-type”}为“field”:“data.temperature”,查询起作用。
感谢你的回答,我试图避免使用相同的名称来保存实际标量值的字段,因为不同的传感器会有不同的结构,som可能甚至没有标量值。我会研究这两个选项,但我会尽量避开自定义脚本! –
哦,我明白了。您仍然可以使用不同的字段名称,但创建另一个标量值(适用于此),您可以将其用于聚合。 – Val
您可以使用脚本文件而不是使用内嵌脚本吗? –