2017-04-06 75 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;。我該怎麼做呢?你可以做到這一點

回答

2

一種方式是通過使用top_hits聚集:

{ 
    "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」分組的字段,其餘字段的值和「事件」的計數。其餘字段的值不會因'name'而改變,所以我不認爲會有任何數據丟失。 – khateeb

+0

那麼兩個同名的人必然會有相同的年齡和地址? – Val

+0

該字段實際上是一個唯一的會話ID。我只是爲了簡潔而使用了名字。 – khateeb

相關問題