2016-04-01 12 views
1

にtop_hits結果の上に集約するかは、例えば、文書である:どのように私はここでelasticsearch

{ 
    "player": "Jim", 
    "score" : 5 
    "timestamp": 1459492890000 
} 

{ 
    "player": "Jim", 
    "score" : 7 
    "timestamp": 1459492895000 
} 

{ 
    "player": "Dave", 
    "score" : 9 
    "timestamp": 1459492894000 
} 

{ 
    "player": "Dave", 
    "score" : 4 
    "timestamp": 1459492898000 
} 

私は、各プレーヤーの最新のスコアを取得し、すべてのそれらのスコアの平均値を取得したいです。したがって、答えは5.5になります。ジムの最新スコアは7、Daveの最新スコアは4です。これら2つの平均は5.5

です。プレーヤーの「最新の」ドキュメントを入手するには、top_hits集計を使用するしかありませんでした。しかし、最新の文書を入手した後、別の集計を行うことはできないようです。

これは私が思い付いたベストです:しかし、これは私にこのエラーが発生します

{ 
    "aggs": { 
    "last_score": { 
     "terms": { "field": "player" }, 
     "aggs": { 
     "last_score_hits": { 
      "top_hits": { 
      "sort": [ { "timestamp": { "order": "desc" } } ], 
      "size": 1 
      }, 
      "aggs": { 
      "avg_score": { 
       "avg": { "field": "score" } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Aggregator [last_score_hits] of type [top_hits] cannot accept sub-aggregations

同様top_hitsを使用せずに、この検索を達成する別の方法がある場合は、私はそれのためにすべてである。

答えて

0

avg_scorelast_score_hitsのサブアグリゲーションとして入力しようとしています。 成功するには、last_scoreのサブ集計としてavg_scoreを入力する必要があります。以下の例を参照してください。

{ 
    "aggs": { 
    "last_score": { 
     "terms": { 
     "field": "player" 
     }, 
     "aggs": { 
     "last_score_hits": { 
      "top_hits": { 
      "sort": [ 
       { 
       "timestamp": { 
        "order": "desc" 
       } 
       } 
      ], 
      "size": 1 
      } 
     }, 
     "avg_score": { 
      "avg": { 
      "field": "score" 
      } 
     } 
     } 
    } 
    } 
} 
+0

これはOPが望んでいるとは思いません。 –

関連する問題