全局搜索
2021-07-29 11:13:49 0 举报
全局搜索
作者其他创作
大纲/内容
如果es服务有问题,直接报错给前台
integrationlife消费端进行消费,然后更新到elasticsearch中
前台
核心搜索接口
定时清除3个月以前的redis中的key为\"“global_search_history_\"开头的zset,利用score来获取三个月之前的所有member,然后利用zrem删除
Y
直接删除redis的key为“global_search_history_ + member_id”即可
是否成功
调用life的接口,进行数据过滤
zset针对重复的member会直接更新score,并不会出现重复的member,这样正好符合搜索历史的不重复特性,并利用更新的时间戳比之前的所有member的score都大,将刚搜的文本提前
过滤成功以后,将结果组装给前台
获取热搜接口
kafka
直接获取redis的key为“global_search_history_ + member_id”(利用zset的ZRANGEBYSCORE命令获取)
删除历史接口
直接获取redis的key为\"global_search_hot\"的值(利用zset的ZRANGEBYSCORE命令获取)
生成周度热搜,基于mysql的搜索历史表来生成周度热搜,每周跑一次,生成以后存在redis的key为\"global_search_hot\"的zset中,给获取热搜接口提供数据
需要两个定时任务
热搜目前的方案是产品或者BU先提供8个写死的热搜,后面会调整,提供热搜配置页面,会基于热搜配置页面+搜索历史形成我们的热搜榜
查询历史接口
订阅binlog
elasticsearch
mysql
Dezebium vs Canal
异步完成两个操作:1.记录搜索历史到mysql的搜索历史表中2.利用redis的zadd命令将搜索关键字和时间戳记录在key为“global_search_history_ + member_id”的zset中注意:这两个操作相对于搜索是异步的,并且这两个操作必须在一个事务中,保证一致性,所以必须是先存储mysql,在存储redis这个顺序
调用elasticsearch的java client来查询关键字结果
redis
0 条评论
回复 删除
下一页