首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >app里的"搜索提示"是如何实现的?

app里的"搜索提示"是如何实现的?

作者头像
浩说编程
发布2022-02-23 16:37:24
发布2022-02-23 16:37:24
1.2K0
举报
文章被收录于专栏:Java经验之谈Java经验之谈

用程序员的角度科普生活知识

hello 兄弟们

我是浩说

今天研究个什么事儿呢?

咱就是说:我们在浏览器或者app里搜索的时候

为什么我只输入了一两个字,下面就已经给我罗列出来我想搜的具体内容了

"搜索"就是"问问题"

其实"搜索"对应现实场景就是"问问题"

这个过程就像是:

我问你:"炸鸡哪家比较好吃?"

你的大脑可能是这样的思考过程:

首先从这句话中提取出两个关键词:炸鸡、好吃

接着将你去过的炸鸡店在脑子里列出来

然后根据"好吃"这个关键词将炸鸡店列表重新排序排序

这样你就得到了答案,于是将排序前几名的店跟我一顿推荐,

顺便还向我甩了一句"怎么老铁想请我吃一顿啊?!"

其实大脑的思考过程和app的思考逻辑是一样的,

我们来具体探寻一下!

关键词

我们每个人使用app时的搜索需求都是不同的,比如购物app,每个人想买的东西都不一样,

这个时候app会定时统计每个用户发送过的搜索内容并生成一个"关键词库":

列出来

年底将至,我们就以"年货"这个关键词为例,当我们在购物app里输入"年货"这个词的时候,

app就会从"关键词库"中将与之相关的词筛选出来:

然后再将这些关键词列出来,我们所看到的关键词通常是"列表"的形式,像这样:

但这是经过app处理之后的表现形式,对于app来说,关键词最初是以""的形式列出来的:

在编程语言里,这种数据结构叫做:

Trie 树 (字典树)

Trie 树 (字典树)

为什么要用这种结构呢?

我们对比"列表"和“Trie 树”来看一下:

相比于"列表",Trie 树的优点在于:通过使用公共字符前缀的方式来节省存储空间。

而"搜索"这种场景不就是根据公共前缀来匹配关键词集合吗,那使用Trie 树就再适合不过了!

排序

经过上一步"列出来"之后,由于数据过多,app还需要将数据重新排序,并选择排名靠前的数据作为最后的"搜索提示"结果来展示给用户。

至于app是如何"排序"的,这里面的内容就比较复杂了,涉及到一些公式化的算法,想要探讨的话一定是长篇大论且枯燥乏味。

你可以简单的这样理解:按照关键词的搜索频率排序,频率越高越靠前:

排好序之后靠前的数据就是我们最终看到的"搜索提示"啦!某宝是展示了前十个:

今天我们探讨了"搜索提示"功能的实现原理

并借此了解了Java的数据结构:Trie 树

以及 Trie 树 的特点、适用场景听说点赞分享的人虎年都能行大运发大财呢,还不赶紧行动起来!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩说编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档