【搜索Case分享】五分钟,教你优化知乎搜索

0. 前言

单纯地讲理论都是耍流氓。今天拿知乎搜索作为例子,撸起袖子来讲一下怎么做搜索吧。本篇文章提到的理论知识,在此专栏前两篇文章中都有比较系统的总结。本文不做过多的理论解释。

本次case使用版本为知乎iOS客户端3.24.2,手机型号iPhone 6S,系统版本9.35。

主要原则:

  • 不纠结现有设计有利有弊的地方
  • 对于所有问题给出判定依据
  • 对于所有问题给出解决方案

当然,这也应该是产品经理面对任何一款产品应该有的态度。

1. 历史搜索

1.1 问题说明:

搜索入口页面有历史记录,这个是应该有的设计,这个也是搜索的一大标准功能,但是实现上有三个问题:

  • 问题1 :一行一个的设计严重浪费空间,尤其在调用键盘的时候只能看见六条内容
  • 问题2:如果用户搜索记录超过十条,清空历史按钮将无法露出
  • 问题3:历史记录不区分搜人还是搜内容(例如“酸牛奶”是搜用户的历史记录,这里点击会出现搜索“酸牛奶”内容的结果,并非用户之前的选择)

1.2 问题方案

对于前两个问题,已经有比较好的解决方案了,直接贴学霸作业你们抄就好了嘛。学霸作业得到点名表扬的原因如下:

  • 标签化展示历史记录展示节省空间
  • 全部清空历史按钮入口明显且可用
  • 长按标签出删除按钮,既满足了高端用户的低频需求,对普通用户折叠也做到了界面简洁,同时也符合iOS的交互(和删除应用交互相同)

至于第三个问题,其实区分开搜人或者搜用户的历史记录就好了。顺手做了一个调整:切换到用户tab默认文案为“搜索用户”,切换到内容tab,默认文案为“搜索问答、文章、话题”。如下图:

2. 自动补全和搜索记录

2.1 问题描述

目前知乎搜索采用了及时输入及时响应的方案,毕竟有搜狗的技术支持。但是,这其实并不是适合移动端的交互方式。因为屏幕限制,无法达到自动补全和搜索记录的及时展示,不利于引导用户搜索和减少用户搜索错误率。搜狗和知乎搜索对比如下,一眼就能看出,学霸搜狗帮知乎写作业了,但是知乎还是有科作业忘交了。

2.2 解决方案:

知乎应该加上自动补全和历史搜索的展示,如下图左边图标做了区分,时钟代表历史输入记录的联想,其他的代表系统的自动补全。

3.内容搜索review

搜索内容的部分因为搜狗的技术支持,是挑不出来什么太大的毛病的。尤其是我并不知道知乎搜索内容引导策略,只能从功能完备性出发。自动纠错,高亮显示,命中词定制,知乎都做了相应的功能。如下图所示:“产品经李”自动纠错为“产品经理”,命中话题“产品经理”顶部展示话题,内容中也有高亮显示。

但是,在技术复杂度更高的搜索内容上做的越来越好的同时,知乎搜索用户的功能做得还是很崩坏。前两个改进主要是交互和功能的改进,接下来主要说一下如何设计搜索的逻辑。

4. 搜索用户问题说明

请大家看几个Bad Case。@酸牛奶大念念是和我互关的普通用户,但是有比较高频的互动,@韦思嘉 是和我互关的一个大V,@伍声 是我关注了游戏解说,全网有人气和粉丝,@张佳玮是我没有关注的大V。那么看case吧。

case1:搜索 “酸牛奶”:首屏有大量的酸牛奶昵称用户,而且“带牙套的乔潇”这个真的没看懂为什么,估计是bug。

case2:搜索“思嘉”:在大约上百个思嘉之后终于出现的非精确匹配的用户,但是浏览完发现没有韦思嘉。

case3:搜索“佳玮”:在大量的佳玮,全部浏览完,没有出现张佳玮的结果。

 

case4:搜索“伍声2009”(伍声优酷用户名):结果在第一屏底部。同时可以对比下微博的搜索结果。

case 5:搜索“产品经理”,发现有姓名中有不含产品经理的用户,但是这些用户签名中有产品经理。

 

针对以上case可以发现一些规律:

  • 1. 知乎搜索应该是没有做分词功能(这在搜人功能中是完全正确的)
  • 2. 精确命中的情况下给了很高的权重。精确命中用户名的用户一定会在上面,即使大V名字部分命中搜索词,也一定再下面,甚至搜不到。
  • 3. 搜索文本数据包含签名信息。
  • 4. 对于用户之间的互关和互动没有给予足够的重视。

同时我们也发现一个知乎现状:

  • 由于没有不许重名的限制,存在大量潜水重名用户。

5. 搜索用户解决方案

5.1 需求分析

在考虑怎么解决上述问题之前,首先需要回归搜索的本质:搜索的需求是什么?对于知乎而言,搜索用户的需求是什么?

在缺乏数据的情况下,通过简单的思辨给出一些我的思考(其实很多成熟的功能需求判断是不需要数据也能得到的):

  • 需求1. 搜索知乎的KOL或者说大V,进一步浏览和关注。
  • 需求2. 想看看自己之前关注的人或者互关的人最近发了什么内容。
  • 需求3. 得知认识的人在知乎,搜索这个人进行关注。

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个小时,在快一周的时间,终于把搜索相关内容全部写完了。第一篇的搜索原理,第二篇的功能盘点,第三篇的实例分析。希望看完的朋友,对于产品中看似最复杂的搜索,有一个比较完整的了解。

- Posted in: Columns

- Tags: ,

0 条评论 ,5,324 次阅读

发表评论

  1. 既然来了,说些什么?

Top