我正在使用Elasticsearch 5.3。我想使用计数字段然后按另一个字段分组。最重要的是,我希望得到该文件中的其他字段。
"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;
。我该怎么做?
答案 0 :(得分:2)
实现此目的的一种方法是使用top_hits
聚合:
{
"aggs": {
"plans": {
"people": {
"field": "name"
},
"aggs": {
"docs": {
"top_hits": {
"size": 1,
"_source": [ "address", "age" ]
}
},
"event_count": {
"value_count": {
"field": "event"
}
}
}
}
}
}
您需要意识到,在您的SQL查询中,您还应该按age
和address
进行分组,否则您将会错过"如果您只按name
分组,则会显示其中一些值。尝试一下,你会发现差异。