{'country': 'France', 'collected': '2018-03-12', 'active': true}
{'country': 'France', 'collected': '2018-03-13', 'active': true}
{'country': 'France', 'collected': '2018-03-14', 'active': false}
{'country': 'Canada', 'collected': '2018-02-01', 'active': false}
{'country': 'Canada', 'collected': '2018-02-02', 'active': true}
Run Code Online (Sandbox Code Playgroud)
假设我有这个结果集,我想按国家对它们进行分组.按国家对它们进行分组后,结果如下:
{'country': 'France', 'collected': '2018-03-14', 'active': false}
{'country': 'Canada', 'collected': '2018-02-02', 'active': true}
Run Code Online (Sandbox Code Playgroud)
但是,我要排除结果,其中最后一排active是false(同一个国家的老行可以是真或假并不重要,只要最后一行等于true),我怎么能在elasticsearch做到这一点?这是我的查询:
POST /test/_search?search_type=count
{
"aggs": {
"group": {
"terms": {
"field": "country"
},
"aggs": {
"group_docs": {
"top_hits": {
"size": 1,
"sort": [
{
"collected": {
"order": "desc"
}
}
]
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不事先过滤它们:
POST /test/_search
{
"query": {
"bool": {
"filter": [
{
"term":{
"active": true
}
}
]
}
},
"aggs": {
"group": {
"terms": {
"field": "country"
},
"aggs": {
"group_docs": {
"top_hits": {
"size": 2,
"sort": [
{
"collected":
{"order":"desc"}
}
]
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
此查询将按 active 为 true 的县对您的数据进行分组。
更多信息:过滤上下文
| 归档时间: |
|
| 查看次数: |
607 次 |
| 最近记录: |