Redis 实现搜索关键词自动补全
一、字典型自动补全
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 实现搜索关键词自动补全相关推荐
- Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)
文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...
- 纯js实现搜索框自动补全
纯js实现搜索框自动补全 开发语言:HTML+CSS+JS 编辑器:VSCode 构建思路:建立两个div,一个用于输入和搜索,一个用于展示,用于展示的初始状态为隐藏的.后面当有键盘输入事件时就显示, ...
- 搜索框自动补全(模糊匹配)功能实现
本地实现了一个搜索框自动补全的小功能,在JQuery UI的autocomplete插件的基础上,加入了自己的业务代码,贴出来回顾一下,同时可以给大家一个参考 首先贴出的是JQuery Ui 的自动补 ...
- elasticsearch模仿淘宝、京东、百度、谷歌搜索,自动补全、自动完成
Elasticsearch(简称es)是一款功能强大的开源分布式实时搜索引擎,在日志分析.企业级搜索.时序分析等领域有广泛应用,几乎是各大公司搜索分析引擎的开源首选方案.本文不讲废话,不谈理论,目的在 ...
- Ajax实现搜索联想 自动补全
什么是搜索联想?自动补全? .百度是一个很典型的代表.在百度的搜索框中输入相关信息的时候,会有搜索联想以及自动补全. .搜索联想和自动补全:实际上是为了方便用户的使用.让用户的体验更好. .搜索联想: ...
- jQuery搜索框自动补全功能插件实现-autocomplete.js
最近用nodeclub实现股票的输入关键字自动补全股票信息进行搜索功能,原先用jQuery-ui,结果jQuery-ui库太大,所以考虑用其他插件,最终选择使用autocomplete.js,控件简单 ...
- html 搜索框 自动补全,自动完成的搜索框javascript实现
自动完成的搜索框javascript实现 2019-01-04 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了自动完成的搜索框javascript实现,编程之家 ...
- solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
今天思考实现了下字符加汉字的搜索建议的 实现--思想主要还是昨天的思想,不过这个方法使用的是匹配查询 ,查询速度可能不太理想 /*** * @描述:用于完成拼音加汉字 组合情况的搜索建议 ---尽量少 ...
- 微信小程序搜索框自动补全功能
▶动态效果图◀ ▶效果涉及到的input属性◀ focus Boolean false 获取焦点 bindinput EventHandle ...
最新文章
- python数据插值_【Python】【数据分析】缺失值处理——插值
- 北邮计算机发展,北邮计算机学科前景怎样?升学就业如何?26日教授亲自来解读...
- 多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)
- 真格量化——商品期权基本策略
- LeetCode MySQL 1623. 三人国家代表队
- java中== 和 .equals()的区别
- Postman接口测试-安装与入门
- Nginx高可用实战
- MySQL主从复制-基于GTID及多线程的复制
- 学科前沿技术专题第九章
- 计算机编程语言的分类
- Java中异或的操作
- 蚁景网络安全渗透测试工程师特训班学习记录
- 盘点 GitHub 年度盛会|附视频
- table添加一行且可编辑 vue_Vue使用AntDesign 表格可添加 可编辑行 可选择
- 力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树
- 启xin宝app的token算法破解
- 免外围电路CH32F/CH32V/STM32F系列单片机串口一键下载方案(CH340)
- 自动登录校园网代码加入wifi自动搜寻并主动连接部分
- [转]Win7下PEiD已停止工作
热门文章
- 【历史杂谈】之《古代最美的谎言》
- 苹果、google、微软的那些事(iPhone)
- 大学公众号题库API
- 与日历有关的小程序推荐
- Codeforces Round #578 (Div. 2) 训练总结及题解
- 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...
- 修复Ubuntu文件系统
- 机器学习实战(三):Classification
- 抠图技术及方法简介(Image Matting Overview)
- 动态规划-背包问题、兑换零钱问题、旅行商问题