对于【ES字段折叠的分页查询】 的方案问题 -

作者 huayng | 发布于2018年09月14日 | 阅读数:175

最近业务遇到一个问题:
假设我的ES里满足条件的数据有: 
①goodsId: 1 , unitId:1 ; 
②goodsId:1,unitId:2 ;
③goodsId:2 ,unitId:2;
④goodsId:3,unitId:3
 
四条数据。
我期望查询结果为:对于相同的goodsId只查出一条,即最终结果是  ① ③ ④ (或者 ②③④也可以)
并且支持分页,查出来的total是3而不是4(因为①②被算作一条)
 
不知道有没有方法可以解决啊
 
已邀请:

superman

赞同来自:

可以采用聚合,然后聚合里面取第一条
 
比如:
POST /sales/_search?size=0 { "aggs": { "top_tags": { "terms": { "field": "type", "size": 3 }, "aggs": { "top_sales_hits": { "top_hits": { "sort": [ { "date": { "order": "desc" } } ], "_source": { "includes": [ "date", "price" ] }, "size" : 1 } } } } } }
 

elasticStack - 90后it大数据男

赞同来自:

1.你可以查出来数据之后后台过滤一下
2.可以使用聚合terms
{
"size": 0,
"aggs": {
"group_by":{
"terms": {
"field": "goodsId.keyword",
"size": "尽可能大的整数"
},
"top_hits": {
"size": 1
}
}
}
}

要回复问题请先登录注册