【发布时间】:2015-11-03 04:30:24
【问题描述】:
我正在尝试进行查询以生成绘图。我的数据索引如下所示:
"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}
}
我正在尝试根据桶的类型汇总桶中的数据,然后执行日期直方图以获取每个读数(温度、湿度)的统计信息。我的问题是如何在 stats 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???
}
}
}
}
}
}
}
}
* 更新 *
按照建议,我在 config/scripts/ 中添加了一个 data-type.groovy 文件,该文件包含以下内容:
return doc['data.temperature'].value
Elasticsearch 能够编译脚本:
[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" 查询有效。
【问题讨论】:
标签: elasticsearch plot statistics