elasticsearch 计算直方图聚合中的数据差,elasticsearch,elasticsearch" /> elasticsearch 计算直方图聚合中的数据差,elasticsearch,elasticsearch" />

elasticsearch 计算直方图聚合中的数据差

elasticsearch 计算直方图聚合中的数据差,elasticsearch,elasticsearch,我想分析一组客户。我对客户增长感兴趣,例如: +自上周以来,43+32%的新客户 +自去年以来,新客户达到12650+1140% 怎么办: 获取本周创建的客户 获得上周创建的客户 数一数 计算百分比差异 因此,首先,我将创建一个直方图,按周对客户进行分类: { "aggs":{ "customers_over_time":{ "date_histogram":{ "field":"created", "interval":"

我想分析一组客户。我对客户增长感兴趣,例如:

+自上周以来,43+32%的新客户 +自去年以来,新客户达到12650+1140% 怎么办:

获取本周创建的客户 获得上周创建的客户 数一数 计算百分比差异 因此,首先,我将创建一个直方图,按周对客户进行分类:

{  
  "aggs":{  
    "customers_over_time":{  
      "date_histogram":{  
        "field":"created",
        "interval":"week"
      }
    }
  }
}
例如,这会导致

{  
  "buckets":[  
    ...,
    {  
      "key_as_string":"2018-10-01T00:00:00.000Z",
      "key":1538352000000,
      "doc_count":1
    },
    {  
      "key_as_string":"2018-10-08T00:00:00.000Z",
      "key":1538956800000,
      "doc_count":7
    },
    {  
      "key_as_string":"2018-10-15T00:00:00.000Z",
      "key":1539561600000,
      "doc_count":5
    }
  ]
}
然后,我将只取最后两个条目并计算差异,然后将其分配给Bucket集合之外的字段。在elasticsearch中,可能通过Bucket脚本聚合实现吗

另一个想法是做一些优化,只为有限数量的客户创建直方图。我试过:

{  
  "query":{  
    "range":{  
      "created":{  
        "gte":"now-1w",
        "lte":"now"
      }
    }
  }
}

然而,这并没有考虑到整个上周,而只考虑了最后7天,这与上周不同。有没有办法在本周和上周创建客户?

我已经尝试了一些东西,希望它会有用。我已经使用了Elasticsearch的串行差异聚合功能,您可以参考此功能了解更多详细信息

假设我本周有三份文件,即2018-10-15开始的一周,上周只有一份文件,即2018-10-08开始的一周

2018-10-15周创建的用户差异为2

下面是我提出的示例查询,它将显示计数与前一周的差异

查询 我使用了滞后为1,因为在这种情况下,您只需要连续两周或两桶之间的差值

查询结果: 结果将显示该周所有文档的计数以及上述json中的差异部分,该差异部分将保存与上周计数的差异

注意,第一个bucket没有区别,因为我在那周之前没有创建任何文档


希望有帮助

您可以使用带有脚本化度量聚合的范围查询在特定时间段内执行此操作。也可以在现有文档中添加一个或两个包含一年中的一周和一年的字段,然后通过简单的聚合来完成。上面有什么好消息吗?有帮助吗?
POST testdateindex/_search
{
  "size" : 0,
  "query" : {
    "bool" : {
      "must" : {
        "range" : {
          "created" : {
            "from":"now-2w",
            "to":"now",
            "include_lower" : true,
            "include_upper" : true
          }
        }
      }
    }
  },
  "aggs": {
    "customers_over_time": {
      "date_histogram": {
        "field": "created",
        "interval": "week"
      },
      "aggs": {
            "difference": {
               "serial_diff": {                
                  "buckets_path": "_count",
                  "lag" : 1
               }
            }
         }
    }
  }
}
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 4,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "customers_over_time": {
      "buckets": [
        {
          "key_as_string": "2018-10-08T00:00:00.000Z",
          "key": 1538956800000,
          "doc_count": 1
        },
        {
          "key_as_string": "2018-10-15T00:00:00.000Z",
          "key": 1539561600000,
          "doc_count": 3,
          "difference": {
            "value": 2
          }
        }
      ]
    }
  }
}