一、字典型自动补全

Redis 的有序集合有一个特性:score 相同时,是按照字典顺序排序的。

如我们需要获取带有某个前缀的提示词,将每个关键词的前缀分别提取并存储在有序集合中,如:foobar,则将 (f,fo,foo,foob,fooba ... foobar$) ,最后一个 foobar$ 表示这是该词的结尾,$ 可以标记为词的结尾符

127.0.0.1:6379> zrange autoc 0 -11) "b"2) "ba"3) "bar"4) "bar$"5) "f"6) "fo"7) "foo"8) "foo$"9) "foob"
10) "fooba"
11) "foobar"
12) "foobar$"

当我们如果需要获取 ba 开头的所有关键词,可以尝试使用有序集合实现:

127.0.0.1:6379> zrank autoc ba
(integer) 1
127.0.0.1:6379> zrange autoc 1 -11) "ba"2) "bar"3) "bar$"4) "f"5) "fo"6) "foo"7) "foo$"8) "foob"9) "fooba"
10) "foobar"
11) "foobar$"

可在程序中通过判断或获取指定长度的集合,获取 bar$ 结尾之前的所有词。

二、topN 关键词自动补全

假设现在需要获取以 “n” 开头的10个热门提示词,则我们首先将所有的词存放在有序集合中,score都为0

127.0.0.1:6379> zrange prefix_n 0 -1
1) "near"
2) "nequ"
3) "netflix"
4) "news"
5) "newyork"

当prefix_n(以n为前缀的集合)这个有序集合一直小于一个阈值,如300时,则直接对某一个搜索词进行 score + 1

当集合大于一个阈值时,则删除score最低的member,然后对搜索词 score + 1

从统计学上来讲,每个对于sorted set中有300个member的前缀,就能得到TOP 5关键词。如果查询越频繁,它的得分越高,它最终被选中的概率也就越高。

参考:

https://www.jianshu.com/p/b9e7feba2a9c

http://oldblog.antirez.com/post/autocomplete-with-redis.html

Redis 实现搜索关键词自动补全相关推荐

  1. Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)

    文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...

  2. 纯js实现搜索框自动补全

    纯js实现搜索框自动补全 开发语言:HTML+CSS+JS 编辑器:VSCode 构建思路:建立两个div,一个用于输入和搜索,一个用于展示,用于展示的初始状态为隐藏的.后面当有键盘输入事件时就显示, ...

  3. 搜索框自动补全(模糊匹配)功能实现

    本地实现了一个搜索框自动补全的小功能,在JQuery UI的autocomplete插件的基础上,加入了自己的业务代码,贴出来回顾一下,同时可以给大家一个参考 首先贴出的是JQuery Ui 的自动补 ...

  4. elasticsearch模仿淘宝、京东、百度、谷歌搜索,自动补全、自动完成

    Elasticsearch(简称es)是一款功能强大的开源分布式实时搜索引擎,在日志分析.企业级搜索.时序分析等领域有广泛应用,几乎是各大公司搜索分析引擎的开源首选方案.本文不讲废话,不谈理论,目的在 ...

  5. Ajax实现搜索联想 自动补全

    什么是搜索联想?自动补全? .百度是一个很典型的代表.在百度的搜索框中输入相关信息的时候,会有搜索联想以及自动补全. .搜索联想和自动补全:实际上是为了方便用户的使用.让用户的体验更好. .搜索联想: ...

  6. jQuery搜索框自动补全功能插件实现-autocomplete.js

    最近用nodeclub实现股票的输入关键字自动补全股票信息进行搜索功能,原先用jQuery-ui,结果jQuery-ui库太大,所以考虑用其他插件,最终选择使用autocomplete.js,控件简单 ...

  7. html 搜索框 自动补全,自动完成的搜索框javascript实现

    自动完成的搜索框javascript实现 2019-01-04 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了自动完成的搜索框javascript实现,编程之家 ...

  8. solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现

    今天思考实现了下字符加汉字的搜索建议的 实现--思想主要还是昨天的思想,不过这个方法使用的是匹配查询 ,查询速度可能不太理想 /*** * @描述:用于完成拼音加汉字 组合情况的搜索建议 ---尽量少 ...

  9. 微信小程序搜索框自动补全功能

    ▶动态效果图◀ ▶效果涉及到的input属性◀ focus     Boolean     false     获取焦点      bindinput     EventHandle          ...

最新文章

  1. python数据插值_【Python】【数据分析】缺失值处理——插值
  2. 北邮计算机发展,北邮计算机学科前景怎样?升学就业如何?26日教授亲自来解读...
  3. 多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)
  4. 真格量化——商品期权基本策略
  5. LeetCode MySQL 1623. 三人国家代表队
  6. java中== 和 .equals()的区别
  7. Postman接口测试-安装与入门
  8. Nginx高可用实战
  9. MySQL主从复制-基于GTID及多线程的复制
  10. 学科前沿技术专题第九章
  11. 计算机编程语言的分类
  12. Java中异或的操作
  13. 蚁景网络安全渗透测试工程师特训班学习记录
  14. 盘点 GitHub 年度盛会|附视频
  15. table添加一行且可编辑 vue_Vue使用AntDesign 表格可添加 可编辑行 可选择
  16. 力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树
  17. 启xin宝app的token算法破解
  18. 免外围电路CH32F/CH32V/STM32F系列单片机串口一键下载方案(CH340)
  19. 自动登录校园网代码加入wifi自动搜寻并主动连接部分
  20. [转]Win7下PEiD已停止工作

热门文章

  1. 【历史杂谈】之《古代最美的谎言》
  2. 苹果、google、微软的那些事(iPhone)
  3. 大学公众号题库API
  4. 与日历有关的小程序推荐
  5. Codeforces Round #578 (Div. 2) 训练总结及题解
  6. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...
  7. 修复Ubuntu文件系统
  8. 机器学习实战(三):Classification
  9. 抠图技术及方法简介(Image Matting Overview)
  10. 动态规划-背包问题、兑换零钱问题、旅行商问题