实现类似 SQL 里面 group by 分组去重之后分页输出列表。
我的做法如下:
用的是composite
桶聚合获取一页的数据,下一页用after
参数。
获取到一页数据列表之后,拿到 id 列表再去主表里面查询具体的数据。
agg 部分:
'aggs' => [
'uid' => [
'composite' => [
'size' => 20,
'sources' => [
[
'uid' => [
'terms' => [
'field' => 'uid',
'order' => 'desc',
],
],
],
],
],
]
用 uid 聚合和排序
用的cardinality
和sum_bucket
组和。
聚合之后在计算桶的总数,size 设置一个比较大的数。
agg 部分:
'aggs' => [
'uid' => [
'terms' => [
'field' => 'uid',
'size' => 5000,
],
'aggs' => [
'uid_count' => [
'cardinality' => [
'field' => 'uid',
],
],
],
],
'sun_uid' => [
'sum_bucket' => [
'buckets_path' => 'uid>uid_count',
],
],
]
方法对不对呀?总感觉 es 做分页列表输出不是太好,只能获取下一页。
ui 需求分页需求是可以跳页,随便点哪页的,用 es 的话,一般怎么满足的?还是说满足不来,只能改需求了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.