无论是新闻、内容、还是电商平台,联想输入已经成为搜索功能的标配,早已不是什么新鲜事物。我们随便打开一个搜索引擎或者是电商平台,当我们在输入框输入拼音或者文字时就会看到输入框下方弹出有意义的搜索建议,提示我们是不是想要输入“以下”内容,帮助我们补齐输入或是修正错误的输入,优化我们的搜索体验。
在上图示例中,我们可以看到,输入关键字 联想搜索,Google 搜索会联想到联想搜索、elasticsearch联想搜索,好处就是,我们无须输入完整的关键字即可轻松完成针对这些 topics 的搜索。
今天我们实现的功能和联想搜索有一点差别,我们是根据用户隔离,基于个人搜索历史的联想搜索。
一个好的自动补全器必须是快速的,并且在用户键入下一个字符后立即更新联想词列表。自动补全器的核心是一个函数,它接受输入的前缀,并搜索以给定前缀开头的词汇或语句列表。通常来说,只需要返回少量的数目即可。
实现方式有很多种,例如前缀树实现,有限状态自动机(DFA)实现等等。
这里采用Redis ZSET数据结构快速实现。
type zset key search-history-common key search-history-user:1 key search-history-user:2 key search-history-user:3
备注:
# 计算新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
# 全量查询 zset key(从小到大) ZRANGE key 0 -1 member2 member # 全量查询 zset key(从大到小) ZRANGE key 0 -1 WITHSCORES member2 2 member 6
以上就是搜索历史基本原理实现即时自动补全联想搜索技巧的详细内容,更多关于搜索历史自动补全联想搜索的资料请关注脚本之家其它相关文章!
编程 | 2023-02-24 21:36
编程 | 2023-02-21 12:51
编程 | 2023-02-21 12:47
编程 | 2023-02-21 00:15
编程 | 2023-02-21 00:08
编程 | 2023-02-20 21:46
编程 | 2023-02-20 21:42
编程 | 2023-02-20 21:36
编程 | 2023-02-20 21:32
编程 | 2023-02-20 18:12
网友评论