功能点其实和小红书的发现功能是类似的。
es 宽表组成的数据是 用户信息+用户发布帖子信息
现在纠结的点在于,一个用户会有 N 多个帖子。
如果这个用户被封禁,那么 es 宽表这个用户的所有数据都要更改。
这个的话,我现在想到的就是异步,一个个被 es 宽表数据进行处理。
想问下有没有更精巧的技术方案。
1
liprais 2022-07-25 11:31:53 +08:00
为啥不是被封禁直接返回空
|
2
awanganddong OP 展示的数据是以帖子为纬度的用户信息。
然后附加用户表的筛选条件。 |
3
LeegoYih 2022-07-25 14:23:54 +08:00
@awanganddong 是要在搜索结果中把被封的用户的帖子都过滤掉吗?
|
4
awanganddong OP @LeegoYih 对的,现在采用的是异步的方案,慢慢去消费封禁用户的帖子
|
5
LeegoYih 2022-07-26 09:59:25 +08:00
@awanganddong
我之前也做过类似的需求,基本思路差不多,对搜索接口做了一点优化: 1. 异步删除帖子:用户被封禁时,通过 MQ 发送一条包含用户 ID 的消息,然后消费者异步删除 es 中的 docs 2. 搜索接口优化:搜索到结果后,可能存在某一个帖子还没来得及删,所以需要判断用户是否被封禁(可以通过查数据库、查用户缓存、bitmap 等方式)。如果用户被封禁,将该帖子数据简化,并标记为已封禁,然后返回给客户端。让客户端展示一个被封禁的文案(也可以直接过滤掉该条帖子,看具体需求) 由于 es 的 doc 是不可变的,所以最好不要做更新处理。更新操作实际上是通过一个.del 文件将原来的 doc 标记为逻辑删除,然后再新建一个 doc 。 |
6
awanganddong OP @LeegoYih 谢谢了,我学习下
|