我正在使用 Elasticsearch 5.3。我想使用对一个字段进行计数,然后按另一个字段进行分组。除此之外,我还希望获得该文档中的其他字段。
"aggs" : {
"people" : {
"terms" : { "field" : "name" },
"aggs" : {
"event_count" : { "value_count" : { "field" : "event" } }
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的ES查询相当于SELECT COUNT(event) FROM table GROUP BY name;. 新的 ES 查询应该像这样的 SQL 查询:SELECT name, address, age, COUNT(event) FROM table GROUP BY name;。我该怎么做呢?
实现此目的的一种方法是使用top_hits聚合:
{
"aggs": {
"plans": {
"people": {
"field": "name"
},
"aggs": {
"docs": {
"top_hits": {
"size": 1,
"_source": [ "address", "age" ]
}
},
"event_count": {
"value_count": {
"field": "event"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您需要意识到,在 SQL 查询中,您还应该进行分组age,address否则,如果您只进行分组,您将“错过”它们的一些值name。尝试一下,您就会发现差异。
| 归档时间: |
|
| 查看次数: |
2465 次 |
| 最近记录: |