2016-08-24 7 views
1

エラスティックセラチアユーザーの方へ弾性検索(COUNT *)グループ別(条件付き)

私はElasticSearchで初心者です。

次のsqlコマンドをelasticSearch DSLクエリに変換する方法は混乱していますか?誰でも私を助けることができますか?

SELECT ip, count(*) as c FROM elastic WHERE date 
BETWEEN '2016-08-20 00:00:00' and '2016-08-22 13:41:09' 
AND service='http' AND destination='10.17.102.1' GROUP BY ip ORDER BY c DESC; 

それは希望date範囲内の文書を選択し、必要なservicedestinationで、その後termsアグリゲーション(=グループを実行します。すなわち、次のクエリは、正確に何をしたい達成するあなた

答えて

5

に感謝by)をフィールドに追加し、後者をカウントの順に減少させます。

{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "range": { 
      "date": { 
       "gt": "2016-08-22T00:00:00.000Z", 
       "lt": "2016-08-22T13:41:09.000Z" 
      } 
      } 
     }, 
     { 
      "term": { 
      "service": "http" 
      } 
     }, 
     { 
      "term": { 
      "destination": "10.17.102.1" 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "group_by_ip": { 
     "terms": { 
     "field": "ip" 
     } 
    } 
    } 
} 
+0

こんにちは、アサルトありがとうございました。私が見ている別の組み合わせを尋ねることはできますか?各ipでSUM_ALL(使用されたボリューム)を実行する方法、最後に集約された例(ip:xxxx、volume:20mb)で表示されます。 ありがとう – user647527