2017-04-06 5 views
0

私はElasticsearch 5.3を使用しています。私はフィールドをカウントし、別のフィールドでグループ化したい。さらに、その文書の他のフィールドも取得したいと考えています。Elasticsearchで用語集と一緒に他のフィールドを取得する方法は?

"aggs" : { 
    "people" : { 
    "terms" : { "field" : "name" }, 
    "aggs" : { 
     "event_count" : { "value_count" : { "field" : "event" } } 
    } 
    } 
} 

上記ESクエリはSELECT COUNT(event) FROM table GROUP BY name;と同等です。新しいESクエリは、次のSQLクエリのようになります。SELECT name, address, age, COUNT(event) FROM table GROUP BY name;。これはどうすればいいですか?あなたはこれがtop_hits集約を使用することです達成することができます

答えて

2

一つの方法:

{ 
    "aggs": { 
    "plans": { 
     "people": { 
     "field": "name" 
     }, 
     "aggs": { 
     "docs": { 
      "top_hits": { 
      "size": 1, 
      "_source": [ "address", "age" ] 
      } 
     }, 
     "event_count": { 
      "value_count": { 
      "field": "event" 
      } 
     } 
     } 
    } 
    } 
} 

あなたのSQLクエリであなたもageaddressでグループそうでなければ、彼らの一部を「ミス」になる必要があることを認識する必要がありますグループ化した場合の値はnameです。それを試してみると違いが見えます。

+0

ありがとうございました。私はその違いをチェックします。私が必要とするのは、 'name'でグループ化されたフィールド、残りのフィールドの値、' event'のカウントです。残りのフィールドの値は「名前」ごとに変更されることはないので、データが失われるとは思わない。 – khateeb

+0

同じ名前の2人は必然的に同じ年齢と住所を持つでしょうか? – Val

+0

フィールドは実際には一意のセッションIDです。私は簡潔さのために名前を使用しました。 – khateeb

関連する問題