弹性搜索日期范围聚合不提供完整数据

时间:2014-11-04 04:33:16

标签: node.js elasticsearch

我正在查询是否根据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, 是什么方式得到这个...请帮助

2 个答案:

答案 0 :(得分:0)

目前尚不清楚您正在寻找的其他领域,所以我已经包含了几个例子。

通过在您的第一个中嵌套另一个 aggs ,您可以要求Elasticsearch撤回其他值,例如averagessumscounts,分钟,最大值,统计信息,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"}}}
    }
  }
}'

根据需要重复此查询,但每次都修改范围。