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 ...
随机推荐
- 剑指Offer面试题:24.复杂链表的复制
一.题目:复杂链表的复制 题目:请实现函数ComplexListNode Clone(ComplexListNode head),复制一个复杂链表.在复杂链表中,每个结点除了有一个Next指针指向下一 ...
- Hadoop学习笔记—4.初识MapReduce
一.神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算.对于大数据量的计算,通常采用的处理手法就是并行计算.但对许多开发者来 ...
- Linq操作非泛型集合
我们都知道,Linq能查询泛型集合,确切的说是:LINQ能实现查询泛型对象或者实现了IEnumerable.但是,很遗憾的是诸如ArrayList这样的非泛型集合并没有实现IEnumerable.那咋 ...
- quick-cocos2d-x 2.2.3 rc版本中 crypto.md5file() 的C++实现在ANDROID上有BUG
原来的版本是用fopen打开文件的,如果要从ANDROID的APK中取文件,直接就洗白了修改如下 void CCCrypto::MD5File(const char* path, unsigned c ...
- 《Entity Framework 6 Recipes》中文翻译系列 (28) ------ 第五章 加载实体和导航属性之测试实体是否加载与显式加载关联实体
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-11 测试实体引用或实体集合是否加载 问题 你想测试关联实体或实体集合是否已经 ...
- 让easyui datagrid支持bootstrap的tooltip
让easyui datagrid支持bootstrap的tooltip 发表于 下午 1:53 by ylpro.net & 分类 Java. Easyui在1.3.3版本之前是不支持tool ...
- 高德地图-搜索服务-POI搜索
高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...
- Apk去掉签名以及重新签名的方法
Android开发中很重要的一部就是用自己的密钥给Apk文件签名,不经过签名的Apk文件一般是无法安装的,就算装了最后也是失败. 网上流传的"勾选允许安装未知来源的应用"其实跟签不 ...
- 【源码】谷歌代理~WPF简单小软件-2015-10-15首发 (2016-03-01已更新源)
蛋疼,昨天把代理去了后才发现,原来咱们连谷歌应用都访问不了,,,用别人的总觉得不怎么安全,然后今天早上就编了个小软件干掉他这限制==> GoogleProxy.exe [主要目的:为了能在线安 ...
- 轻量级前端MVVM框架avalon - 模型转换
接上一章 ViewModel modelFactory工厂是如何加工用户定义的VM? 附源码 洋洋洒洒100多行内部是魔幻般的实现 1: function modelFactory(scope) { ...