我正在尝试获取包含和排除条件的唯一计数。假设我希望在place
等于london
而不是paris
时获得每组ID的计数。下面是同一索引中不同文档的示例。
[
{
"groupId": 123,
"place": "london"
},
{
"groupId": 123,
"place": "berlin"
},
{
"groupId": 456,
"place": "london"
},
{
"groupId": 789,
"place": "london"
},
{
"groupId": 789,
"place": "paris"
},
{
"groupId": 789,
"place": "berlin"
},
{
"groupId": ABC,
"place": "tokyo"
}
]
输出应类似于:
[
{
"groupId": 123,
"count": "1"
},
{
"groupId": 456,
"count": "1"
}
]
不包括"groupId": 789
,因为有一个place
是paris
,不包括"groupId": "ABC"
,因为它没有任何london
1条答案
按热度按时间0vvn1miw1#
我使用了以下聚合
1. Terms aggregation
2. filter aggregation
3. Bucket selector
在查询部分,我已经过滤了位置为伦敦或巴黎的文档。这是为了通过删除不具有这两个属性的文档来提高性能。例如,“groupID”:“abc”
在Aggregation部分,我对groupId执行了GROUP BY,然后使用过滤器Aggregation计算了它下面的伦敦和巴黎的计数。使用存储桶选择器,我只保存了伦敦计数至少为1、巴黎计数为零的那些组ID。
查询
结果