Suggestion(搜索建议)产品和技术
今天来简单聊聊Suggestion产品
什么是Suggestion服务? 一图胜千言:

当你想要搜索某个长词语或者一句话输入部分时,Suggestion服务预测你极大可能的候选项,并罗列出来,供你选择。
产品的意义:
1. 降低用户搜索的输入成本,用户总是懒惰的,谁能让用户最懒惰还能帮他把事办好,这就是好的产品。当然如果真有一天能用脑电波搜索了,这个产品功能就没意义了.
2. 为用户提供提示,因为有部分用户多一个长词组很有可能只能记住部分。如有部电影叫"心急吃不了热豆腐",朋友A推荐给朋友B,只记得"心急吃不了啥"了
3. 提高搜索转化率,用户在任何过程中都有可能流失,打字打完"心急吃不了",一个朋友说别看这个了,看<冰与火之歌>吧,可能还差那最后3个字就能转战别的电影了
什么样的词应该纳入到Suggestion里面去呢?
如果把所用所有的搜索记录都作为suggestion服务,那用户输入完一个前缀后,就会出现满屏的词语;在这种场景下,尽量提供好用的suggestion而保持简洁的结果的秘诀在于把控数量并提高转化率,所以一般可以用双重法则
1. 如果这个前缀的所有搜索词不超过N个,按转化概率从大到小排序
2. 如果超过N个, 放弃掉用户转化率小于a的搜索词,按转化概率从大到小排序
整体技术上怎么实现呢?
如果你在做一个Suggestion总词语量较小的产品. (<千万级)
短平快,直接用小脚本扫每天的用户搜索日志,然后根据策略得出整个搜索词表,放到Mysql中;
查询直接用 select XXX from TABLE_XXX where SuggestionWords like {QUERY}% 进行查询
访问量大怎么办?
mysql 的查询成为瓶颈,在前面加一层缓存,来存储结果List即可.
访问量极大怎么办?
这里极大的意思时,一瞬间的某个词语的缓存未命中(失效或者DB更新后delete)查询会拖死Mysql
两个思路
1. mysql加从库 Master-Slave集群
2. 更新时主动生成缓存,让前端查询任何时刻都看不到缓存未命中
如果你在做一个Suggestion总词语量较大的产品. (>千万级)
类似的场景我之前遇到的是百度的帐号注册时的Suggestion, N亿的注册用户,新用户上来了想注册abcd这个帐号,已经被占用了,所以一般推荐abcd作为前缀能用的帐号如abcd1,abcd11等,类似的场景如域名注册服务商的推荐。
技术实现上可以用Tire树,Tire树的每个条边就是每个词,从非根节点到根节点经过的所有的边组成了一个词,如下图的最长词dcba

通过这种方式就能对海量基数词进行Suggestion服务了。
另外tire树的插入、查找、删除的时间复杂度都是o(N),N为待插入、查找、删除字符串的长度。
Suggestion(搜索建议)产品和技术的更多相关文章
- 【百度地图API】如何使用suggestion--下拉列表方式的搜索建议
原文:[百度地图API]如何使用suggestion--下拉列表方式的搜索建议 摘要: 百度地图上有一个很强大的搜索建议功能,以下拉列表的方式展示出来.比如,输入“百度”,下拉列表中就会出现“北京市海 ...
- 各大搜索引擎智能提示API(JSONP跨域实现自动补全搜索建议)
---------------------------------------搜索引擎JSONP接口--------------------------------------------- 提示:U ...
- 嵌入AppBar并且带搜索建议的搜索框(Android)
先看结果: 相关的官方文档在这里:Creating a Search Interface Android官方提供了两种方式: 弹出一个Dialog,覆盖当前的Activity界面 在AppBar中扩展 ...
- solr入门之搜索建议的几种实现方式和最终选取实现思路
上篇博客中我简单的讲了下solr自身的suggest模块来实现搜索建议.但是今天研究了下在solr自身的suggest中添加进去拼音来智能推荐时不时很方便.在次从网上搜集和整理思考了下该问题的解决. ...
- 看好腾讯,鄙视百度(腾讯的核心竞争力,不是超过10亿的QQ的注册用户,也不是某一项产品、技术方面优势,而是“耐心”:懂得在合适的时间推出合适的产品。”)
百度,自始至终只是一个低劣的模仿者,且一切向前看,完全违背了一个搜索引擎所应该遵循的基本原则.谁给的钱多就能搜着谁,这跟贩毒有什么区别? 腾讯也在模仿别人,但是,它是模仿然后超越.在中国互联网发展历史 ...
- ES[7.6.x]学习笔记(十二)高亮 和 搜索建议
ES当中大部分的内容都已经学习完了,今天呢算是对前面内容的查漏补缺,把ES中非常实用的功能整理一下,在以后的项目开发中,这些功能肯定是对你的项目加分的,我们来看看吧. 高亮 高亮在搜索功能中是十分重要 ...
- 如何写好B端产品的技术方案?
B端产品为企业提供协同办公的工具,帮助企业解决某类经营管理问题,核心价值在于为企业增加收入.降本提效.管控风险,企业级SaaS产品也是B端产品中的一类. B端产品有以下特点: 客户是一个群体:B端产 ...
- AJAX实现google搜索建议实战
搜索建议实战的目标是为了输入搜索内容,动态的进行匹配,效果图如下: 整体思路: 在客户端搜索框中触发onkeyup事件, 随时向PHP服务器请求当前输入框中的内容, PHP服务器获取到keywords ...
- 一个简单的ExtJS搜索建议框
封装的是一个Ext4.2的组件,继承并兼容于Ext的ComboBox. 实现原理非常easy,在 combo 中监听 keyup 事件就可以. 搜索建议的Combo.基本上全然兼容, 使用方式与Com ...
随机推荐
- 架构设计(ASP.NET MVC+Knockout+Web API+SignalR)
最近忙于重构项目的架构设计,没有时间发博客,也没有时间回复邮件及博文评论,忘各位见谅: 今天先发布架构设计图,同样没有时间写相关的介绍也没有时间回复评论,所以就不发在首页,希望给看到的朋友一些参考,同 ...
- .Net组件程序设计之线程、并发管理(一)
.Net组件程序设计之线程.并发管理(一) 1.线程 线程 线程的创建 线程的阻塞 线程挂起 线程睡眠 加入线程 线程中止 现在几乎所有的应用程序都是多线程的,给用户看来就是一个应用程序界面(应用程序 ...
- ASP.NET MVC 从零开始 - 请求处理
这篇文章是从我的 github 博客 lxconan.github.io 导入的. 这是这个系列的第三篇了.前两篇文章请参见: ASP.NET MVC 从零开始 - Create and Run AS ...
- LinuxThreads 和 NPTL
http://www.ibm.com/developerworks/cn/linux/l-threading.html Linux 线程模型的比较:LinuxThreads 和 NPTL 进行移植的开 ...
- 每天一个linux命令(48):watch命令
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...
- 《Node web开发》笔记
还是因为学习kibana,才开始了解node. Node是一种基于事件驱动的异步系统,基于Chrome的引擎V8. Node中由于大量的使用模块,因此出现了很多开源模块,有点像java社区的样子. 笔 ...
- salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)
此篇请参看:https://resources.docs.salesforce.com/202/latest/en-us/sfdc/pdf/salesforce_developer_environme ...
- Android_安卓为按钮控件绑定事件的五种方式
一.写在最前面 本次,来介绍一下安卓中为控件--Button绑定事件的五种方式. 二.具体的实现 第一种:直接绑定在Button控件上: 步骤1.在Button控件上设置android:onClick ...
- sql复习第四次
1.关系操作的特点是集合操作 2.关系模型的完整性规则包括实体完整性规则,参照完整性规则,用户定义的完整性规则 3.rou联接运算是由笛卡儿积和选择操作组合而成的 4.自然联接运算是由笛卡儿积,选择, ...
- Eclipse开发工具组合键介绍
1. 编辑类 Ctrl + Q 跳到最后一次的编辑处 Ctrl + 1 快速修复提示 Alt + ↓ ...