0. 前言
单纯地讲理论都是耍流氓。今天拿知乎搜索作为例子,撸起袖子来讲一下怎么做搜索吧。本篇文章提到的理论知识,在此专栏前两篇文章中都有比较系统的总结。本文不做过多的理论解释。
本次case使用版本为知乎iOS客户端3.24.2,手机型号iPhone 6S,系统版本9.35。
主要原则:
当然,这也应该是产品经理面对任何一款产品应该有的态度。
1. 历史搜索
1.1 问题说明:
搜索入口页面有历史记录,这个是应该有的设计,这个也是搜索的一大标准功能,但是实现上有三个问题:
1.2 问题方案
对于前两个问题,已经有比较好的解决方案了,直接贴学霸作业你们抄就好了嘛。学霸作业得到点名表扬的原因如下:
至于第三个问题,其实区分开搜人或者搜用户的历史记录就好了。顺手做了一个调整:切换到用户tab默认文案为“搜索用户”,切换到内容tab,默认文案为“搜索问答、文章、话题”。如下图:
2. 自动补全和搜索记录
2.1 问题描述
目前知乎搜索采用了及时输入及时响应的方案,毕竟有搜狗的技术支持。但是,这其实并不是适合移动端的交互方式。因为屏幕限制,无法达到自动补全和搜索记录的及时展示,不利于引导用户搜索和减少用户搜索错误率。搜狗和知乎搜索对比如下,一眼就能看出,学霸搜狗帮知乎写作业了,但是知乎还是有科作业忘交了。
2.2 解决方案:
知乎应该加上自动补全和历史搜索的展示,如下图左边图标做了区分,时钟代表历史输入记录的联想,其他的代表系统的自动补全。
3.内容搜索review
搜索内容的部分因为搜狗的技术支持,是挑不出来什么太大的毛病的。尤其是我并不知道知乎搜索内容引导策略,只能从功能完备性出发。自动纠错,高亮显示,命中词定制,知乎都做了相应的功能。如下图所示:“产品经李”自动纠错为“产品经理”,命中话题“产品经理”顶部展示话题,内容中也有高亮显示。
但是,在技术复杂度更高的搜索内容上做的越来越好的同时,知乎搜索用户的功能做得还是很崩坏。前两个改进主要是交互和功能的改进,接下来主要说一下如何设计搜索的逻辑。
4. 搜索用户问题说明
请大家看几个Bad Case。@酸牛奶大念念是和我互关的普通用户,但是有比较高频的互动,@韦思嘉 是和我互关的一个大V,@伍声 是我关注了游戏解说,全网有人气和粉丝,@张佳玮是我没有关注的大V。那么看case吧。
case1:搜索 “酸牛奶”:首屏有大量的酸牛奶昵称用户,而且“带牙套的乔潇”这个真的没看懂为什么,估计是bug。
case2:搜索“思嘉”:在大约上百个思嘉之后终于出现的非精确匹配的用户,但是浏览完发现没有韦思嘉。
case3:搜索“佳玮”:在大量的佳玮,全部浏览完,没有出现张佳玮的结果。
case4:搜索“伍声2009”(伍声优酷用户名):结果在第一屏底部。同时可以对比下微博的搜索结果。
case 5:搜索“产品经理”,发现有姓名中有不含产品经理的用户,但是这些用户签名中有产品经理。
针对以上case可以发现一些规律:
同时我们也发现一个知乎现状:
5. 搜索用户解决方案
5.1 需求分析
在考虑怎么解决上述问题之前,首先需要回归搜索的本质:搜索的需求是什么?对于知乎而言,搜索用户的需求是什么?
在缺乏数据的情况下,通过简单的思辨给出一些我的思考(其实很多成熟的功能需求判断是不需要数据也能得到的):
5.2 bad case和需求1,2的解决
问题1需要给大V足够的排序权重,问题2需要给关注关系一定的权重,问题3需要能精确搜索到用户的唯一标识。
先说问题1和2,首先知乎给精确命中的潜水用户很大的权重是否应该呢?用户是否有动机去搜一个自己不认识的潜水用户呢?答案当然是不应该和没有动机。
所以直接给一个初步的公式,然后具体参数可以随后迭代吧。
为姓名文本相关度的权重,name为文本相关度的得分
为签名文本相关度的权重,sign为文本相关度的得分
为粉丝数的权重,log(fans)为粉丝数的以10为底的对数
为获得赞数的权重,log(like)为获得赞数的以10为底的对数
为权重的归一化系数,保证得分在一个合理范围内
为关注关系的权重。follow为关注关系的取值,互关为2,单项关注(搜索用户关注了被搜索用户)权重为1,没有关系权重为0
因为没有计算器,为了好算,假设五个权重取值为10,4,2,1,1,假设签名全部不命中不得分。则公式简化为:
姓名得分方便起见,假设精确命中得分为2,非精确命中得分为1(实际的计算比较复杂):
非精确命中,1万粉丝,1万赞,无关注关系用户得分:2
非精确命中,0粉丝,0赞,互相关注用户得分为:2.9
非精确命中,0粉丝,0赞,单项关注用户得分为:1.9
精确命中,0粉丝,0赞,无关注关系用户得分为:1.8
这种情况下,4中提到的所有bad case全部解决。5中提到的需求1和需求2也都完全满足了。
5.3 已经解决的需求3
唯一缺乏的就是还有一个需求:得知认识的人在知乎,搜索这个人进行关注。因为之前没有关注关系,这些人如果没有粉丝,即使精确命中会被排在最下面。
其实这个问题的根本原因是知乎的重名问题,微信和微博因为每个人都是唯一ID(微博名和微信号),所以肯定可以快速搜索到。说到这里可能有人已经想到了,各位都有个个人域名,就是各位的知乎ID。比如我就是pan-yiming-61。其实知乎已经做到了,只是没有引导大家使用而已。现在是可以直接搜索知乎ID,并排在结果第一位。
需求3其实就是需要大家都知道自己这个ID是可以搜索的,今后让别人关注自己的知乎,直接让TA去搜ID就好了(就像搜索微信号那样)。
这个故事也告诉我们,功能做好知识第一步,一到大家使用才是真正的完成需求。
6.总结
每天下班到家10点左右,锻炼洗漱完11点左右。每天晚上写大概2~3个小时,在快一周的时间,终于把搜索相关内容全部写完了。第一篇的搜索原理,第二篇的功能盘点,第三篇的实例分析。希望看完的朋友,对于产品中看似最复杂的搜索,有一个比较完整的了解。
既然来了,说些什么?