SpringBoot+Redis 搞定搜索栏热搜、*敏*感*词*文字过滤功能

优采云 发布时间: 2022-04-30 20:18

  SpringBoot+Redis 搞定搜索栏热搜、*敏*感*词*文字过滤功能

  来源:/qq_25838777/article/

  details/109489767

  使用java和redis实现一个简单的热搜功能,具备以下功能:

  搜索栏展示当前登陆的个人用户的搜索历史记录,删除个人历史记录

  用户在搜索栏输入某字符,则将该字符记录下来 以zset格式存储的redis中,记录该字符被搜索的个数以及当前的时间戳 (用了DFA算法,感兴趣的自己百度学习吧)

  每当用户查询了已在redis存在了的字符时,则直接累加个数, 用来获取平台上最热查询的十条数据。(可以自己写接口或者直接在redis中添加一些预备好的关键词

  最后还要做*敏*感*词*文字过滤功能。这个很重要不说了你懂的。

  代码实现热搜与个人搜索记录功能,主要controller层下几个方法就行了 :

  向redis 添加热搜词汇(添加的时候使用下面*敏*感*词*文字过滤的方法来过滤下这个词汇,合法再去存储

  每次点击给相关词热度 +1

  根据key搜索相关最热的前十名

  插入个人搜索记录

  查询个人搜索记录

  首先配置好redis数据源等等基础

  最后贴上核心的 服务层的代码 :

<p>package com.****.****.****.user;<br /> <br />import com.jianlet.service.user.RedisService;<br />import org.apache.commons.lang.StringUtils;<br />import org.springframework.data.redis.core.*;<br />import org.springframework.stereotype.Service;<br />import javax.annotation.Resource;<br />import java.util.*;<br />import java.util.concurrent.TimeUnit;<br /> <br />/**<br /> * @author: mrwanghc<br /> * @date: 2020/5/13<br /> * @description:<br /> */<br />@Transactional<br />@Service("redisService")<br />public class RedisServiceImpl implements RedisService {<br /> <br />    //导入数据源<br />    @Resource(name = "redisSearchTemplate")<br />    private StringRedisTemplate redisSearchTemplate;<br /> <br /> <br />    //新增一条该userid用户在搜索栏的历史记录<br />    //searchkey 代表输入的关键词<br />    @Override<br />    public int addSearchHistoryByUserId(String userid, String searchkey) {<br />        String shistory = RedisKeyUtils.getSearchHistoryKey(userid);<br />        boolean b = redisSearchTemplate.hasKey(shistory);<br />        if (b) {<br />            Object hk = redisSearchTemplate.opsForHash().get(shistory, searchkey);<br />            if (hk != null) {<br />                return 1;<br />            }else{<br />                redisSearchTemplate.opsForHash().put(shistory, searchkey, "1");<br />            }<br />        }else{<br />            redisSearchTemplate.opsForHash().put(shistory, searchkey, "1");<br />        }<br />        return 1;<br />    }<br /> <br />    //删除个人历史数据<br />    @Override<br />    public Long delSearchHistoryByUserId(String userid, String searchkey) {<br />        String shistory = RedisKeyUtils.getSearchHistoryKey(userid);<br />        return redisSearchTemplate.opsForHash().delete(shistory, searchkey);<br />    }<br /> <br />    //获取个人历史数据列表<br />    @Override<br />    public List getSearchHistoryByUserId(String userid) {<br />        List stringList = null;<br />        String shistory = RedisKeyUtils.getSearchHistoryKey(userid);<br />        boolean b = redisSearchTemplate.hasKey(shistory);<br />        if(b){<br />            Cursor cursor = redisSearchTemplate.opsForHash().scan(shistory, ScanOptions.NONE);<br />            while (cursor.hasNext()) {<br />                Map.Entry map = cursor.next();<br />                String key = map.getKey().toString();<br />                stringList.add(key);<br />            }<br />            return stringList;<br />        }<br />        return null;<br />    }<br /> <br />    //新增一条热词搜索记录,将用户输入的热词存储下来<br />    @Override<br />    public int incrementScoreByUserId(String searchkey) {<br />        Long now = System.currentTimeMillis();<br />        ZSetOperations zSetOperations = redisSearchTemplate.opsForZSet();<br />        ValueOperations valueOperations = redisSearchTemplate.opsForValue();<br />        List title = new ArrayList();<br />        title.add(searchkey);<br />        for (int i = 0, lengh = title.size(); i 

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线