elasticsearch Elasticsearch:日期范围内的操作总和,elasticsearch,date-range,elasticsearch,Date Range" /> elasticsearch Elasticsearch:日期范围内的操作总和,elasticsearch,date-range,elasticsearch,Date Range" />

elasticsearch Elasticsearch:日期范围内的操作总和

elasticsearch Elasticsearch:日期范围内的操作总和,elasticsearch,date-range,elasticsearch,Date Range,有一件事我必须与ES(1.7)有关,我不知道如何去做。 让我看看是否可以用sql和表来显示它,也许转换为ES查询更容易。 设想一个表按日期指向 DATE PURCHASE_COUNT ACCUMULATED_POINTS day 1 5 548 day 2 8 498 day 3 9 623 day 4 9 635 day

有一件事我必须与ES(1.7)有关,我不知道如何去做。 让我看看是否可以用sql和表来显示它,也许转换为ES查询更容易。 设想一个表按日期指向

DATE    PURCHASE_COUNT  ACCUMULATED_POINTS
day 1         5              548
day 2         8              498
day 3         9              623
day 4         9              635
day 5        13              620
如果它是一个表,我会执行如下查询来检索我需要的内容:

SELECT SUM(q.AVG_POINT_PURCHASE) as POINT_BY_PURCHASE
FROM (
   SELECT (ACCUMULATED_POINTS / PURCHASE_COUNT) as AVG_POINT_PURCHASE
   FROM points_by_date
) q;
是否可以在ES中执行此操作?我需要补充的是,这些操作是在日期范围内的桶上完成的,类似这样:

{
  "timeout": 1500,
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "date": {
              "from": "2016-12-01",
              "to": "2016-12-05",
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  },
  "aggregations": {
    "my_ranges": {
      "date_range": {
        "field": "date",
        "ranges": [
          {
            "from": "2016-12-01",
            "to": "2016-12-05"
          },
          {
            "from": "2016-12-06",
            "to": "2016-12-10"
          }
        ]
      },
      "aggregations": {
        "TOTAL_POINTS" : {
          "sum" : {
            "field" : "ACCUMULATED_POINTS"
          }
        },
        "PURCHASE_COUNT" : {
          "avg" : {
            "field" : "PURCHASE_COUNT"
          }
        }
      }
    }
  }
}
每个日期范围表示表中的一组N行,我需要从中进行计算

ES查询有一种以前的方法,我得到每个存储桶的平均购买数量,然后将存储桶的累积点数之和除以该平均值。现在我需要先除以,然后按桶累加。如果可能的话,有什么想法吗


提前谢谢

为了防止有人需要它或类似的东西,我设法做到:

{
  "timeout": 1500,
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "date": {
              "from": "2016-12-01",
              "to": "2016-12-05",
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  },
  "aggregations": {
    "my_ranges": {
      "date_range": {
        "field": "date",
        "ranges": [
          {
            "from": "2016-12-01",
            "to": "2016-12-05"
          },
          {
            "from": "2016-12-06",
            "to": "2016-12-10"
          }
        ]
      },
      "aggregations": {
        "sum_avg_purchase_point": {
          "sum": {
            "script": {
              "inline": "doc[accumulatedPoints].value.intValue() / (doc[purchaseCount].value.intValue() == 0 ? 1 : doc[purchaseCount].value.intValue())",
              "params": {
                "accumulatedPoints": "ACCUMULATED_POINTS",
                "purchaseCount": "PURCHASE_COUNT"
              }
            }
          }
        }
      }
    }
  }
}
我首先尝试了所有针对ES的方法,一旦我让它工作并完成了我需要的演算,在验证了结果之后,我用JavaAPI创建了这个查询

希望它能帮助一些人!问候