首页 > 数据库 >利用redis完成自动补全搜索功能(一)

利用redis完成自动补全搜索功能(一)

时间:2023-04-03 17:44:22浏览次数:435  
标签:补全 nb redis 搜索 自动 nba

 

最近要做一个搜索自动补全的功能(目前只要求做最前匹配),自动补全就是自动提示,类似于搜索引擎,再上面输入一个字符,下面会提示多个关键词供参考,比如你输入 nb 2字符, 会自动提示nba,nba录像,nba直播 。

  能想到的一般有3种解决方案  

  1.利用mysql来做,只能使用 like 'nb%'这样的方式来完成,虽然最前匹配是能够利用到索引的,但是这种做法效率太低.。

  2.利用搜索分词来实现,比如sphinx ,讯搜,elasticsearch , 一般都是采用此方案。

  3.网上查了下,通过redis的有序集合也能实现。

  我们这里讲解redis的方法,思路如下

  1.先把每个词拆分出来,如果 nba 拆分为 

  n

       nb

  nba

  加入到有序集合(sorted set),注意添加到redis时score都设置为0,这些字符就会按照自然排好序。

  注意:这里把score为0是非常有用的,可以试验下,然后看下排序的结果。

  

  好了,准备工作完了,进行下一步,搜索以nb开头的 ,我们可以通过zrank命令轻松定位到nb的位置(index),然后通过index获取从nb开头的有序集合。

    

  如果图已经获取到想要结果,如果取到不为nb开头的字符串,通过程序循环判断即可。

      

1 foreach($lsit as $val){
2     if (strpos($val,'nb') !== false)
3         break;
4 }

  2.上图可以看到取到了非有用的字符串, nb ,比较接单的解决方案就是 写入redis之前给有用的字符串结果拼上一个标识符,例如*

   

  取出来程序判断最后一个字符如果为*保留即可

参考文档:http://oldblog.antirez.com/post/autocomplete-with-redis.html

标签:补全,nb,redis,搜索,自动,nba
From: https://www.cnblogs.com/yzl042349/p/17283799.html

相关文章

  • 使用Spring-data进行Redis操作
     Redis相信大家都听说过,它是一个开源的key-value缓存数据库,有很多Java的客户端支持,比较有名的有Jedis,JRedis等(见这里)。当然我们可以使用客户端的原生代码实现redis的操作,但实际上在spring中就已经集成了这些客户端的使用,下面我们就以Jedis为例来介绍一下Spring中关于Redis的配置。......
  • redis持久化
    Redis持久化是指将Redis内存中的数据保存到磁盘中,以防止数据在Redis重启后丢失。Redis支持两种不同的持久化方式:RDB和AOF。RDB持久化:将内存中的数据定时或者按照一定规则保存到磁盘上的一个快照文件中。快照文件是一个二进制文件,包含了某个时刻Redis内存中的所有数据。RDB持久......
  • swoole+websocket+redis实现一对一聊天
     如同web端的QQ和微信一样,这是一个web端的聊天程序。环境:linux(centos)+php7.2+swoole扩展+redis+mysqlRedis实现每个连接websocket的服务都唯一绑定一个用户。通过用户账号=websocketfd存到redis中。Mysql实现离线消息池。如果一个用户不在线,则其他用户发......
  • 从二分搜索到二叉搜索树
    引言打算写写树形数据结构:二叉查找树、红黑树、跳表和B树。这些数据结构都是为了解决同一个基本问题:如何快速地对一个大集合执行增删改查。本篇是第一篇,讲讲搜索树的基础:二叉搜索树。基本问题如何在一千万个手机号中快速找到13012345432这个号(以及相关联信息,如号主姓名)?......
  • 二叉搜索树中的众数
    LeetCode|501.二叉搜索树中的众数给你一个含重复值的二叉搜索树(BST)的根节点root,找出并返回BST中的所有众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按任意顺序返回。假定BST满足如下定义:结点左子树中所含节点的值小于等于当前节点的值结点右子树中所......
  • redis__windows系统下启动命令
     cmd进入redis目录下输入:redis-server.exeredis.windows.conf  windows系统开机自动开启redis服务:进入redis文件夹,输入redis-server.exe--service-installredis.windows.conf--loglevelverbose......
  • redis介绍
         ......
  • 直播平台开发,小程序自定义搜索标题栏
    直播平台开发,小程序自定义搜索标题栏一:需求把微信小程序标题栏处变成搜索栏。自定义返回上级页面。二:需求分析首先要把小程序标题栏设置为可自定义。然后计算原标题栏的高度组成结构。根据计算高度设置搜索框和返回按钮的布局。最后进行代码功能实现。三:功能实现1:设置标......
  • redis主从复制
     一、主从复制定义1、主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能......
  • redis哨兵和集群
     一、redis哨兵主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。 哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移。 1、哨兵模式......