2017-01-04 15 views
0

ESと何か関係があります(1.7)、どうすればよいか分かりません。 SQLとテーブルで表示できるかどうかを見てみましょう。ESクエリに変換する方が簡単かもしれません。それは表だった場合 は、テーブルpoints_by_dateElasticsearch:date_rangeバケット上の演算の合計

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クエリには以前のアプローチがありました。バケットあたりの平均purchase_countを取得し、その平均でバケットの累積ポイントの合計を後で分割していました。今私は最初に分割し、バケツごとに蓄積する必要があります。可能であればどのような考えですか?

ありがとうございます!

答えて

0

誰かがそれまたは類似した何かを必要とするだけの場合には、私がこれまで管理:

{ 
    "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に対してすべてを試みたが、私はそれが働いて、私は必要な計算をやっていたと、と確認した後、結果、Java APIを使用してそのクエリを作成しました。

いくつかの人に役立つことを願っています!よろしく!