我正在查询是否根据date_range获取汇总数据,如下所示
"aggs": {
"range": {
"date_range": {
"field": "sold",
"ranges": [
{ "from": "2014-11-01", "to": "2014-11-30" },
{ "from": "2014-08-01", "to": "2014-08-31" }
]
}
}
}
使用此我收到此回复
"aggregations": {
"range": {
"buckets": [
{
"key": "2014-08-01T00:00:00.000Z-2014-08-31T00:00:00.000Z",
"from": 1406851200000,
"from_as_string": "2014-08-01T00:00:00.000Z",
"to": 1409443200000,
"to_as_string": "2014-08-31T00:00:00.000Z",
"doc_count": 1
},
{
"key": "2014-11-01T00:00:00.000Z-2014-11-30T00:00:00.000Z",
"from": 1414800000000,
"from_as_string": "2014-11-01T00:00:00.000Z",
"to": 1417305600000,
"to_as_string": "2014-11-30T00:00:00.000Z",
"doc_count": 2
}
]
}
}
但是我还需要完整的聚合数据来满足这个范围,而不仅仅是doc_count, 是什么方式得到这个...请帮助
答案 0 :(得分:0)
目前尚不清楚您正在寻找的其他领域,所以我已经包含了几个例子。
通过在您的第一个中嵌套另一个 aggs ,您可以要求Elasticsearch撤回其他值,例如averages,sums,counts,分钟,最大值,统计信息,etc。
此示例查询将带回field_count
- myfield
的实例数
并返回order_count
- 基于脚本的总和。
"aggs": {
"range": {
"date_range": {
"field": "sold",
"ranges": [
{ "from": "2014-11-01", "to": "2014-11-30" },
{ "from": "2014-08-01", "to": "2014-08-31" }
]
}
}
},
"aggs" : {
"field_count": {"value_count" : { "field" : "myfield" } },
"order_count": {"sum" : {"script" : " doc[\"output_msgtype\"].value == \"order\" ? 1 : 0"} } }}
}
答案 1 :(得分:0)
如果您没有查找数据的任何总和,计数,平均值,那么汇总就无济于事。
我会改为每个范围运行一次标准查询。 e.g:
curl -XGET 'http://localhost:9200/test/cars/_search?pretty' -d '{
"fields" : ["price", "color", "make", "sold" ],
"query":{
"filtered": {
"query": {
"match_all" : { }
},
"filter" : {
"range": {"sold": {"gte": "2014-09-21T20:03:12.963","lte": "2014-09-24T20:03:12.963"}}}
}
}
}'
根据需要重复此查询,但每次都修改范围。