搜索这种产品形态是典型的轻前端,重后端,看似是个小横条,输入关键词出结果,但真要进入到产品设计阶段,想把这个过程描述完整,还是要考虑挺多维度的,今天就和大家聊聊这个话题。
我自己虽然没专门做过搜索产品,但因为经历过的产品以内容为主,搜索是标配,所以多少还是接触过一些的。今天就来聊聊构建一套完整搜索需求框架,需要考虑哪些维度。
先看界面,完整的搜索功能,至少要包含:搜索入口、搜索主页、搜索结果页,三大页面。下面我们一个个说。
搜索入口
也就是暴露给用户,能让用户找到搜索功能的地方。通常有三种呈现方式,按重视程度从小到大分为:icon级、通栏级、页面级。icon级就是在整个页面角落处,通常是左上角或右上角放一个可点击的放大镜图标;通栏级则是以一个置顶横条方式铺开一个搜索框;页面级则是把一个App的底部TAB贡献给了搜索,通常这个TAB叫做搜索或者发现。举例如下图:
一般内容类这种重搜索的产品,都采用通栏级,一方面不太占地方,另一方面能足够让用户感知,而且通栏的提示文字(灰色的placeholder)还可以起到引导用户搜索的商业化作用。从交互上,为了方便用户检索,有些产品还会在用户上滑屏幕时将搜索框置顶(如知乎)。
搜索主页
如果入口是“页面级”,主页就是入口页。但大部分搜索模块是要在用户点击入口后,给到用户一个相对独立的搜索主页的。这个主页建议包含的模块有:搜索框、热门搜索词、历史搜索记录这三类,如下图:
搜索框是最核心的功能,却是界面布局最简单的,就是一个横条,加上个取消,也就是返回按钮。从交互角度要考虑的有两点,第一是进入时是否需要默认光标焦点在输入框中并弹出键盘;第二是搜索框的placeholder是否需要显示,显示什么,以及规定好如果此时执行搜索就要默认对placeholder进行搜索。
热门搜索目的有2个,第一是告知用户大家都在搜什么,间接增加内容点击量;第二是给广告主曝光关键词,用作广告位。设计热门搜索词要考虑的就是词条的出现规则、更新规则和排序规则。36氪采用的是机器计算和人工筛选的方法,小时级更新,热度判断比较简单,就是看关键词的命中率取最高的,取倒序。其实这里面还有更多优化空间,比如根据热词点击、热词上升速度等维度优化排序模型。
搜索历史相对简单,就是把每次的搜索词都记录下来,按搜索时间倒序。期间有2点要注意,第一是排列方式,因为无法预知搜索词长短,以列表方式记录搜索历史排版会更灵活。但如果觉得太占地方,也可以直接用标签形式展示,字数过多中间用“…”。第二就是要有条数上限,而不是记录所有历史,超过一定条数就把之前的顶掉即可。
搜索结果
设计结果页时需要考虑的包括:可搜索实体种类、搜索命中规则、命中后的结果排序规则、命中后的结果展示样式,未命中的结果展示样式,这几种。大概的模块分布如下图:
接下来依此说下这些要素的思路。
1)可搜索实体种类
也就是说清楚你要让用户能搜什么。以36氪为例就是:文章、快讯、音频、视频、作者、话题、专题这几类实体。不同实体要考虑的命中规则不同、展示样式不同、关键词匹配项也不同,因此确认这些实体是第一要务。这里额外说下,对纯搜索引擎产品,最底层的搜索实体就一种:网页,但也会基于网页特征提取出一些独立实体,比如图片、视频,多个维度满足搜索目的。另外,以百度为例,还会以搜索引擎为渠道,为自家公司产品矩阵进行一定程度的分发,同时进一步满足用户多元化的搜索需求。也就是除了“网页”外,还能搜新闻资讯——百家号引流;问题——百度知道引流;文档——百度文库引流等等。
2)搜索命中规则
命中规则是搜索产品最核心的部分,一方面需要提取入库实体文本的特征值,另一方面还要对输入项进行分词,最后将搜索词和实体特征进行匹配。对于匹配规则,有简单和复杂2种做法,最简单的就是产品经理规定好哪些实体的哪些字段,完全/模糊匹配到搜索词,就算命中了。比如36氪,就是规定文章的标题、简介,只要包含搜索词即算匹配。但这样做可能导致结果过少、也很可能会误判,比如搜“马云”,匹配的是“神马云搜索”的报道。因此更复杂的做法,需要对可搜索实体进行文本的词频提取,选取其中被提及最多的关键词代表该实体,哪个更贴近搜索词,哪个的命中率就越高。这里面用到的经典算法就是:TF-IDF。
3)命中后的结果排序规则
有匹配就有排序,通常比较复杂的搜索引擎,默认排序是基于一套权重计算公式来打分倒排的。这个公式,一方面要考虑被搜索实体的“质量”,代表算法是:PageRank;一方面要根据特定实体的特色设计专属计算公式,比如文章的权重是基于:PV、UV、发布时间、是否独家、是否原创、点赞量、分享量、评论量来计算,视频的权重要额外考虑完播率,作者权重则是考虑作者发文数等等。搜索结果的综合排序规则通常是不开放的,因为权重经常调,也为了防止SEO作弊,但站在用户角度,也希望能给予其自行控制排序规则的功能,因此可以考虑允许用户在基础搜索结果下,按某个单一维度排序,比如36氪就提供:相关性、发布时间两个维度的选项:
4)命中后的结果展示样式
搜索结果展示页,从结构上要考虑2个维度,第一是综合搜索结果,第二是单一实体结果。综合搜索通常显示的是所有实体的搜索聚合页,一般从上到下分区块呈现,同时提供单一实体页面的跳转入口,而单一实体结果页,可以是以顶部Tab的形式供用户横滑跳转。不同实体的结果样式,要充分考虑UI的一致性,以统一模板展示。以36氪为例,文章、快讯、音频、视频等样式,和首页频道信息流的样式是基本一致的。如下图:
此外,还要考虑高亮用户搜索关键词,让用户知悉为何会搜出对应内容。
5)未命中的结果展示样式
搜索无结果时,一方面要友好告知用户,另一方面可以利用这个页面的曝光机会,给用户其他选择建议,比如他可能感兴趣的其他栏目文章,或者全站热门内容等等,完成内容的二次分发:
OK,到此,我能想到的搜索模块产品设计思路就是这些了,当然肯定没专业的搜索产品经理考虑的全面,而搜索又是个强技术驱动的产品,因此如果想真正把搜索做好,还要在充分了解其底层实现原理的前提下,基于用户需求场景去预测其想要的结果,从数据上观察CTR、召回率和bad case,持续调优。
以上就是今天想和大家聊的,会对你有帮助么?期待你的回复与我分享~