2017-10-18 2 views
1

私は、正と負の最大の変更を月にpluginsとしたい、時間ベースのネストされたデータをいくつか持っています。私はElasticsearch 5.3(およびKibana 5.3)を使用しています。次のようにElasticsearch:トップレベルの重複がなく月にトップネストされたドキュメントを取得する

文書が構造化されています。

{ 
     _id: "xxx", 
     @timestamp: 1508244365987, 
     siteURL: "www.foo.bar", 
     plugins: [ 
      { 
       name: "foo", 
       version: "3.1.4" 
      }, 
      { 
       name: "baz", 
       version: "13.37" 
      } 
     ] 
    } 

ただし、ID(siteURL)ごとに、私は月ごとに複数のエントリを持っていると私は不当な計量を避けるために、唯一のタイムバケットごとに、最新のを使用したいと思います。 私は以下の集約を使用することによってこの問題を解決しようとした:

{ 
    "aggs": { 
    "normal_dates": { 
     "date_range": { 
     "field": "@timestamp", 
     "ranges": [ 
      { 
      "from": "now-1y/d", 
      "to": "now" 
      } 
     ] 
     }, 
     "aggs": { 
     "date_histo": { 
      "date_histogram": { 
      "field": "@timestamp", 
      "interval": "month" 
     }, 
     "aggs": { 
      "top_sites": { 
      "terms": { 
       "field": "siteURL.keyword", 
       "size": 50000 
       }, 
      "aggs": { 
       "top_plugin_hits": { 
       "top_hits": { 
        "sort": [ 
        { 
         "@timestamp": { 
         "order": "desc" 
         } 
        } 
        ], 
        "_source": { 
        "includes": [ 
         "plugins.name" 
        ] 
        }, 
        "size": 1 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

は、今私は毎月、最新のサイトとそのプラグインを取得します。次に、データを外に出して、プラグインを月に1回、出現回数を取得したいと思います。それから私は月を比較するためにserial_diffを使用します。

しかし、集計からシリアル差分に移動する方法、つまりデータを裏返しにする方法はわかりません。

すべてのヘルプは大歓迎

PS次のようになります。私はKibana 5.3テーブルにそれを得ることができれば、余分な名声を...

答えて

0

それは結局のところ、それはtop_hitsクエリにさらに集約することはできません。

私は投稿されたクエリの結果をPythonにロードしてしまい、さらなる処理と視覚化のためにPythonを使用しました。

関連する問題