2017-08-08 23 views
0

Use Elasticsearchバージョンが5.4.2Elasticsearchの平均最小時間の計算方法は?

3つの条件を満たすためにElasticsearchクエリを作成したいと思います。

  1. championId
  2. によってフィルタは、すべてのゲーム内の各アイテムを購入する平均最小限の時間を計算ゲーム
  3. あたりの様々なアイテムを購入するための最小限の時間を取得します。

私は1と2でしたが、解決できませんでした3。クエリで1から3を実行することは可能ですか?その場合は、PHPフレームワークの1つであるLaravel 5.4で結果を使用します。

マイデータフォーマットは以下の通りです:

"_index": "timelines", 
"_type": "timeline" 
"_source": { 
     "gameId": 152735348, 
     "participantId": 3, 
     "championId": 35, 
     "role": "NONE", 
     "lane": "JUNGLE", 
     "win": 1, 
     "itemId": 1036, 
     "timestamp": 571200 
} 

私の現在のElasticsearchクエリは、私が正しくあなたの目的を理解していれば、あなたがpipeline aggregationsでこの問題を解決することができるはずこの

GET timelines/_search?size=0&pretty 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { "match": { "championId": 22 }} 
     ] 
    } 
    }, 
    "aggs": { 
    "games": { 
    "terms": { 
     "field": "gameId" 
    }, 
    "aggs": { 
     "items": { 
     "terms": { 
      "field": "itemId", 
      "order" : { "min_buying_time" : "asc" } 
     }, 
     "aggs": { 
      "min_buying_time": { 
      "min": { 
       "field": "timestamp" 
      } 
      } 
     } 
     } 
    } 
    } 
    } 
} 

答えて

0

です。具体的には、Avg Bucket aggregationを参考にしてください。ドキュメントの例を参照してください。これは、私が必要とするものに非常に近いものです。

ような何か:SönkeLiebau @として

"avg_min_buying_time": { 
     "avg_bucket": { 
     "buckets_path": "games>min_buying_time" 
     } 
    } 
+0

Sönke、あなたの助けに感謝します。私は「パイプライン集約」という言葉は聞いたことがありません。あなたが言ったウェブページをチェックするつもりです。 :) – hikozuma

1

は、パイプラインの集約がキーですが、項目ごとに、すべてのゲームの平均最小限の時間をカウントしたい場合は、ITEMIDによる最初の集計をすべきだと述べました。以下のコードは役に立ちます:

POST misko/_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { "match": { "championId": 22 }} 
     ] 
    } 
    }, 
    "aggs": { 
    "items": { 
     "terms": { 
     "field": "itemId" 
    }, 
    "aggs": { 
     "games": { 
     "terms": { 
      "field": "gameId" 
     }, 
     "aggs": { 
      "min_buying_time": { 
      "min": { 
       "field": "timestamp" 
      } 
      } 
     } 
     }, 
     "avg_min_time": { 
     "avg_bucket": { 
      "buckets_path": "games>min_buying_time" 
     } 
     } 
    } 
    } 
    } 
} 
+0

ミハエル、助けてくれてありがとう。 gameId - > itemId(私の方法)、itemId - > gameId(あなたの方法)の2つの方法と正しい方法を確認します。 :) – hikozuma

+0

問題ありません。 :) お知らせ下さい。 –

+0

あなたの道が正しいとわかりました。クエリ結果には、1試合あたりのすべてのアイテムの最小購入時間の平均が含まれていました。それは意味をなさない。しかし、クエリ結果にはアイテムごとのすべてのゲームの最小購入時間の平均が含まれていました。これが私の必要なものでした!どうもありがとうございました。 – hikozuma

関連する問題