今天来简单聊聊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(搜索建议)产品和技术的更多相关文章

  1. 【百度地图API】如何使用suggestion--下拉列表方式的搜索建议

    原文:[百度地图API]如何使用suggestion--下拉列表方式的搜索建议 摘要: 百度地图上有一个很强大的搜索建议功能,以下拉列表的方式展示出来.比如,输入“百度”,下拉列表中就会出现“北京市海 ...

  2. 各大搜索引擎智能提示API(JSONP跨域实现自动补全搜索建议)

    ---------------------------------------搜索引擎JSONP接口--------------------------------------------- 提示:U ...

  3. 嵌入AppBar并且带搜索建议的搜索框(Android)

    先看结果: 相关的官方文档在这里:Creating a Search Interface Android官方提供了两种方式: 弹出一个Dialog,覆盖当前的Activity界面 在AppBar中扩展 ...

  4. solr入门之搜索建议的几种实现方式和最终选取实现思路

    上篇博客中我简单的讲了下solr自身的suggest模块来实现搜索建议.但是今天研究了下在solr自身的suggest中添加进去拼音来智能推荐时不时很方便.在次从网上搜集和整理思考了下该问题的解决. ...

  5. 看好腾讯,鄙视百度(腾讯的核心竞争力,不是超过10亿的QQ的注册用户,也不是某一项产品、技术方面优势,而是“耐心”:懂得在合适的时间推出合适的产品。”)

    百度,自始至终只是一个低劣的模仿者,且一切向前看,完全违背了一个搜索引擎所应该遵循的基本原则.谁给的钱多就能搜着谁,这跟贩毒有什么区别? 腾讯也在模仿别人,但是,它是模仿然后超越.在中国互联网发展历史 ...

  6. ES[7.6.x]学习笔记(十二)高亮 和 搜索建议

    ES当中大部分的内容都已经学习完了,今天呢算是对前面内容的查漏补缺,把ES中非常实用的功能整理一下,在以后的项目开发中,这些功能肯定是对你的项目加分的,我们来看看吧. 高亮 高亮在搜索功能中是十分重要 ...

  7. 如何写好B端产品的技术方案?

    B端产品为企业提供协同办公的工具,帮助企业解决某类经营管理问题,核心价值在于为企业增加收入.降本提效.管控风险,企业级SaaS产品也是B端产品中的一类. B端产品有以下特点: ​客户是一个群体:B端产 ...

  8. AJAX实现google搜索建议实战

    搜索建议实战的目标是为了输入搜索内容,动态的进行匹配,效果图如下: 整体思路: 在客户端搜索框中触发onkeyup事件, 随时向PHP服务器请求当前输入框中的内容, PHP服务器获取到keywords ...

  9. 一个简单的ExtJS搜索建议框

    封装的是一个Ext4.2的组件,继承并兼容于Ext的ComboBox. 实现原理非常easy,在 combo 中监听 keyup 事件就可以. 搜索建议的Combo.基本上全然兼容, 使用方式与Com ...

随机推荐

  1. Javascript本质第二篇:执行上下文

    在上一篇文章<Javascript本质第一篇:核心概念>中,对Javascript执行上下文做了解释,但是这些都是基于Javascript标准中对执行上下文的定义,也就是说理论上的东西,本 ...

  2. Rxjava异常处理

    异常处理 在Rxjava订阅的Observable有时会抛出异常,在RxJava中有两大类策略,一个是准备备用的Observable,在发生异常时将subscriber订阅到新的Observable上 ...

  3. Java中常见的29个运行异常

    ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotR ...

  4. 每天一个linux命令(47):iostat命令

    Linux系统​中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况. ...

  5. 【PRINCE2是什么】PRINCE2认证之七大原则(2)

    我们先来回顾一下,PRINCE2七大原则分别是持续的业务验证,经验学习,角色与责任,按阶段管理,例外管理,关注产品,剪裁. 第二个原则:吸取经验教训. PRINCE2要求项目团队吸取以前的经验教训,在 ...

  6. WPF入门教程系列十七——WPF中的数据绑定(三)

    四. XML数据绑定 这次我们来学习新的绑定知识,XML数据绑定.XmlDataProvider 用来绑定 XML 数据,该XML数据可以是嵌入.Xmal文件的 XmlDataProvider 标记中 ...

  7. Tornado框架中视图模板Template的使用

    上文的程序中有这样一段: class MessageHandler(tornado.web.RequestHandler): def get(self): self.write(''' <htm ...

  8. Azure Service Febric 笔记:Web API应用

    1.什么是Service Febric 贴一段微软官方的介绍 Service Fabric 是一种分布式系统平台,可让你轻松打包.部署和管理可缩放.可靠的微服务.Service Fabric 还解决了 ...

  9. Ado net Source 用法

    Ado net Source 是用于获取数据源的,使用的connection manager是 ado net connection. Ado Net Source 的Data Access Mode ...

  10. jQuery 2.0.3 源码分析 事件绑定 - bind/live/delegate/on

    事件(Event)是JavaScript应用跳动的心脏,通过使用JavaScript ,你可以监听特定事件的发生,并规定让某些事件发生以对这些事件做出响应 事件的基础就不重复讲解了,本来是定位源码分析 ...