先说下业务场景,在我们的业务中,分析存在ES中的数据,需要获取到一定数据量的去重明细数据,例如,我们想要查看某一批设备的属性信息,分析设备属性是否存在某些一致性特征,这种情况下,我们就需要获取到这些设备属性的去重数据,因为重复的设备信息对我们没有意义。
我在网上找到很多的聚合去重查询,但是大部分都是restful api实现,而且大部分都是去重查询数量,查明细数据的例子很少。
基于restful api的实现很容易,只要拼装出相应的聚合查询json数据结构,设置好聚合、排序、数量限制等条件,即可完成去重明细查询,例如:
{
"query": {
"bool": {
"must": [],
"must_not": [],
"should": ["deviceId-1", "deviceId-2", "deviceId-3"]
}
},
"from": 0,
"size": 0,
"sort": [],
"aggs": {
"device_aggs": {
"cardinality": {
"field": "deviceId"
}
},
"target": {
"terms": {
"field": "deviceId",
"size": 1000
},
"aggs": {
"rated": {
"top_hits": {