Elasticsearch:date_histogram和计算间隔

时间:2016-03-01 02:56:22

标签: elasticsearch analytics

假设我有很多商店,我想展示一月到二月间访问量增长最多的商店。

到目前为止,我使用date_histogram通过此查询获取每月和每个商店的数字:

query: {
  range: {
    visited_at: {
      gte: "2016-01-01T00:00:00Z",
      lt: "2016-03-01T00:00:00Z"
    }
  }
},
size: 0,
aggs: {
  months: {
    date_histogram: {
      field: 'visited_at',
      interval: "month"
    },
    aggs: {
      stores: {
        terms: {
          size: 0,
          field: 'store_id'
        }
      }
    }
  }
}

它返回的内容如下:

"aggregations": {
  "months": {
    "buckets": [
      {
        "key_as_string": "2016-01-01T00:00:00.000+00:00",
        "key": 1451574000000,
        "doc_count": 300,
        "stores": {
          "doc_count_error_upper_bound": 0,
          "sum_other_doc_count": 0,
          "buckets": [
            {
              "key": 1,
              "doc_count": 100
            },
            {
              "key": 2,
              "doc_count": 200
            }
          ]
        }
      },
      {
        "key_as_string": "2016-02-01T00:00:00.000+00:00",
        "key": 1454252400000,
        "doc_count": 550,
        "stores": {
          "doc_count_error_upper_bound": 0,
          "sum_other_doc_count": 0,
          "buckets": [
            {
              "key": 1,
              "doc_count": 150
            },
            {
              "key": 2,
              "doc_count": 400
            }
          ]
        }
      }
    ]
  }
}

有了这个,我正在获取所有商店的数据,然后比较我的代码中的增长,但我希望有一个查询可以让Elasticsearch计算增长并返回我只有前n个。

我尝试了一些Pipeline聚合,但我无法得到我想要的东西。

我想另一种改进方法是让批量计算每个月末的月度增长,然后存储它。 Elasticsearch能否自动执行此操作?

仅供参考我在使用Elasticseach 2.2并且我正在使用它进行增长:(feb_result - jan_result) / jan_result

0 个答案:

没有答案