本文作者:云初冀北

搜索历史基本原理实现即时自动补全联想搜索技巧

搜索历史基本原理实现即时自动补全联想搜索技巧摘要: 实现搜索历史-[即时自动补全&联想搜索]无论是新闻、内容、还是电商平台,联想输入已经成为搜索功能的标配,早已不是什么新鲜事物。我们随便打开一个搜索引擎或者是电商平台,当我们在输入框...

实现搜索历史?=-[即时自动补全&amP;联想搜索]

无论是新闻、内容、还是电商平台,联想输入已经成为搜索功能的标配,早已不是什么新鲜事物。我们随便打开一个搜索引擎或者是电商平台,当我们在输入框输入拼音或者文字时就会看到输入框下方弹出有意义的搜索建议,提示我们是不是想要输入“以下”内容,帮助我们补齐输入或是修正错误的输入,优化我们的搜索体验。

搜索历史基本原理实现即时自动补全联想搜索技巧

在上图示例中,我们可以看到,输入关键字 联想搜索Google 搜索会联想到联想搜索ElasticSearch联想搜索,好处就是,我们无须输入完整的关键字即可轻松完成针对这些 topics 的搜索。

今天我们实现的功能和联想搜索有一点差别,我们是根据用户隔离,基于个人搜索历史的联想搜索

如何实现基于个人搜索历史的联想推荐

一个好的自动补全器必须是快速的,并且在用户键入下一个字符后立即更新联想词列表自动补全器的核心是一个函数,它接受输入的前缀,并搜索以给定前缀开头的词汇或语句。通常来说,只需要返回少量的数目即可。

架构

搜索历史基本原理实现即时自动补全联想搜索技巧

词汇表实现

实现方式有很多种,例如前缀树实现,有限状态自动机(DFA)实现等等。

这里采用Redis Zset数据结构快速实现。

ReDIs 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 型的分数。redis 正是通过分数来为集合中的成员进从小到大排序
type zset key search-history-common key search-history-user:1 key search-history-user:2 key search-history-user:3 

搜索历史基本原理实现即时自动补全联想搜索技巧

搜索历史基本原理实现即时自动补全联想搜索技巧

备注:

常用搜索词数据统计规则定时取出所有人词库中排名靠前n位的搜索项并放入常用搜索库中分数值 = 原有分数值*1.01+1.01 (为什么用一元函数,因为可以让常用词和不常用词更快的区分开)分数值初始值为 1

实现原理

新增关键字操作

直接添加 默认score = 1添加失败查询score设置新score = score*1.1+1.1 (注意zset不能重新设置score缓存完成

搜索历史基本原理实现即时自动补全联想搜索技巧

# 计算新score # 新score应该 = score*1.1+1.1 但是 需要用Zadd,所以需要换算,(score*1.1+1.1)-score = a ZADD key a member # 化简得到 ZADD key score*0.1+1.1 member 
# 添加 member = 1 返回 score # 如果存在则添加失败 返回 0 ZADD key 1 member # 获取分,不存在返回 null ZSCORE key member # 对某个键加上增量 ZADD key 1 member 

删除关键字操作

直接删除
# 删除成功返回 1,如果一个zset下没有item, zset也会被自动删除 ZREM key member 

查询推荐列表操作

全量查询当前用户词汇表使用String.contains 或者其他框架过滤出推荐词返回推荐列表到前端

搜索历史基本原理实现即时自动补全联想搜索技巧

# 全量查询 zset key(从小到大) ZRANGE key 0 -1 member2 member # 全量查询 zset key(从大到小) ZRANGE key 0 -1 WITHSCORes member2 2 member 6

以上就是搜索历史基本原理实现即时自动补全联想搜索技巧的详细内容,更多关于搜索历史自动补全联想搜索的资料请关注云初冀北其它相关文章!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:GOliszhou@gmail.com
$

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,192人围观)参与讨论

还没有评论,来说两句吧...