从0开始设计产品搜索功能(二)

0 评论 4597 浏览 55 收藏 24 分钟

怎样搭建好一个产品的搜索功能?这篇文章里,作者梳理了产品的搜索流程框架,并从激活搜索、输入关键字等细分维度进行了详细剖析,一起来看一下,或许会对你有所帮助。

搜索的进行主要分为 3 个阶段,分别为搜索前、搜索中、搜索后。这 3 个阶段分别对应搜索功能的静止状态、点击触发状态、确认搜索状态。对功能状态再进行细化,可以得到一个框架清晰的搜索流程。如下图所示,展示了一个完整的搜索流程。

一、激活搜索

1. 光标聚焦

用户进入激活搜索状态,表明用户需要通过搜索来获取想要的内容。搜索功能设计的第一个目标就是聚焦

用户在点击搜索框的时候会唤起底部键盘,输入框内闪烁蓝色光标。这个设计会让视觉更聚焦于搜索框,而不受其他内容的干扰,底部唤起的键盘也有助于减少屏幕内的干扰要素。

2. 衍生能力

基于搜索这一需求,搜索功能衍生出了搜索记录、搜索发现和搜索榜单的能力。从产品视角上看,我们需要提供更多的途径和选择让用户快速触达目标。

一般的互联网产品在点击搜索框进入搜索功能页时,页面会展示搜索记录、搜索发现和搜索榜单三个栏目。除了搜索记录,大部分的榜单和推荐主要是为了商业运营的目的而存在。比如外卖、电商平台,其推荐和榜单功能并不意味要展示 “好” 的产品。

二、输入关键字

1. 反馈方式

用户在输入关键字的时候一般会有两种反馈方式。

第一种方式是实时匹配输入结果,这种方式对搜索的精确度较高,同时也考验着产品的响应速度。第二种方式是关键词联想,对精确度要求较低,讲求一个模糊,搜索大致相近的内容。

为什么会出现两种反馈方式的差异?我认为原因更多地可能与业务场景有关。

类似小红书、知乎、百度贴吧等资讯、社区类产品,会有许多内容击中一个关键词,属于一对多的关系。相反,类似饿了么、飞书等产品,对精确搜索有着更高的要求,目的性会更强。

2. 搜索目的

除了业务场景,导致搜索场景差异的原因来自用户的不同诉求,每个用户的搜索目的都是不一样的

举两个明确的例子:

  1. 模糊搜索(一对多):通过小红书搜索牛肉该怎么做,会出来非常多的帖子。因为牛肉的做法不唯一,这不是一个精确的目的。
  2. 精确搜索(一对一):通过外卖平台搜索 LeeLin 柠檬茶(非安利,但是是真的好喝),搜索结果会出来唯一结果,这是一个精确的目的。

对于这两种搜索目的,可以给出明确的定义:

  1. 精确搜索:用户搜索时有明确的目标,想在已知内容中快速定位所需信息。输入的关键词反映的是用户想获取的信息主题。
  2. 模糊搜索:用户搜索目标不太明确,想在未知内容中探索信息。用户对所需信息的主题和关键词未完全理清,希望去发现和探索,难以结构化地表达所要解决的问题。

结合上面的例子和定义,总结一下用户的搜索场景。

3 联想模式

1)提供关联结果

用户输入关键词的时候会触发展示关联结果,这种做法在内容平台被广泛使用,比如下图在小红书搜索 citywalk 出现的关联内容。

这种关联结果展示能够有效地降低用户输入成本,提升搜索效率。从用户获取网络资讯和热点的流程上看,大部分用户对于寻求问题答案的途径都大致相似,比如某天在豆瓣发现了一个大瓜,会上微博或小红书搜索。从发现内容到搜索内容,这就是一种用户路径。

除了应用内搜索,部分应用还会针对关键词进行显示设计。比如在谷歌中搜索 “今日天气” 会直接展示天气数据,甚至搜索一些特定关键词还会触发彩蛋。感兴趣的可以搜一搜这篇文章:谷歌,互联网界的 “彩蛋狂魔。

搜索“Super Mario Bros”(超级玛丽兄弟),搜索页面右侧就会出现超级玛丽的宝箱

2)商业化运营

联想模式在商业化的运用也十分常见。在外卖软件搜索 “咖啡”,除了展示商品,产品运营还会在其中穿插营销内容和推荐产品,满足有营销诉求的商家。

总的来说,关键词联想主要用在两个地方:

一个是用户搜索时,可以给到提示的作用,方便找到想要的信息。另一个是用户输入的时候不用一个字一个字去敲,减少输入成本。对于平台来说,联想功能可以用来做一些营销推广的活动。

在设计这种包含输入词的交互的时候,最好结合产品本身的目的和目标用户的使用场景来思考,这样可以让用户体验更顺畅。

三、解析关键词

除了产品设计,在搜索功能中最重要的一环是搜索的逻辑

用户会输入什么,会不会输错,一般会有哪些错误,对于错误应该如何解决?对这些疑问的解答构成了搜索功能中的核心环节。

产品经理不能希望用户的每次输入都是 “正确” 的,符合自己要求的。更多情况下,用户在搜索时出现拼写错误、表达错误导致的搜索不准确、搜索无结果的情况经常发生,且难以避免。

为了更准确的理解用户想要搜什么,搜索系统通常会添加多种解析规则来增加系统对于用户输入内容的理解。比如预处理、分词、改写等方式。对关键词的解析越精确,搜索功能更能为用户带来价值和满足。

1. 预处理

预处理是对关键词进行字符转换、删除、截断等处理,将关键词进行标准化和简化,以更准确地理解用户搜索意图,提供更精准的搜索结果。

这个定义一听有些复杂,不妨将预处理这个流程放在日常生活中去理解。什么叫做预处理?预处理可以理解为把从市场买回来的菜洗净、分类处理,等待下锅前的这一过程。

预处理的通常有 5 种方式,分别为:拼音转文字、大小写切换、繁简体转换、无意义字符移除、长度截断。

1)拼音转文字

示例:输入 “chanpinjingli” 时会转化为 “产品经理”

场景:在 B 端 CRM 系统中搜索用户姓名一直都是一件令人苦恼的事情,尤其是当用户的姓名较为生僻的时候。这个时候通过拼音搜索能够快速定位到用户。

2)大小写切换

示例:输入 “B1-A156-t2” 时会转化为 “b1-A1-P510”(负1层 – A1区域 – 510号车位)

场景:在 ERP 系统(企业资源计划)中通常会有数量众多企业物资信息。以商场为例,对于一些固定资产,如商铺、车位,甚至是卫生间的马桶都有各自的编号。通过大小写字母混排的方式来查找资产的方式较为复杂,而将输入的内容统一转换为小写字母就会更易查找。

3)繁简体转换

示例:输入 “産品經理” 时会转为为 “产品经理”,反之亦然

场景:通常适用于涉及到繁体字书写的地区。

4)无意义字符移除

示例:忽略特殊字符,包括 emoji、颜文字、空格、数字符号、语气词等

场景:在没有使用字符输入限制的情况下,输入无意义字符一般都会影响输出结果,导致结果为空。在一些文档搜索的场景中,作为特殊字符的空格也会导致搜索失败。目前许多社区都有开源的《停用词库》可供调用,结合实际的业务场景就可以梳理出一套较为适合的词库。

5)长度截断

示例:输入字符超过上限,截断上限字符后面输入的内容

场景:搜索引擎通常会常用分词的方式进行搜索。如果输入一个词组较多的长句,那么对于搜索匹配的压力会大大加强,长度截断更考虑搜索调用产生的负载。目前百度的输入上限为 18 个汉字,Google 为 12 个词。

总体来看,“拼音转汉字”、“大小写转换”、“繁简体转换” 这三种方式是通过提高系统判断规则的复杂程度,来减小用户输入的复杂程度,降低用户的输入难度和成本。“无意义字符去除” 和 “长度限制” 则是合理筛选关键词,简化表达,以提高搜索结果的准确性。

2. 分词

当输入关键词和数据库匹配时,用户能够很轻松地得到想要的答案。但是也要注意到一个问题,加入用户输入的关键词无法与数据库完全匹配呢?

一般出现无法完全匹配的情况时会采用分词的形式,将一个句子或一个词组拆分为多个 Term。Term 可以是单字或词组,Term 的作用在于它能和数据库形成匹配

既然采取了分词的形式,就接下来就需要考虑如何进行分词。

在英文语句中,分词是一件很 “自然” 的事情,组成句子的单词具有固定的结构,书写句子也习惯通过空格隔开。但中文的表达通常不会用空格,且无论采用哪种分词方式都会形成不同的表达。

目前,大多数字产品采用的是基于词典的分词方式,即维护一个分词词库。如果输入的关键词能在词库中找到对应词组,则可以召回该词组相关的内容。但是基于词库分词存在一定维护成本,例如出现新词时需要手动添加等。

以飞书搜索作为例子。在飞书文档中搜索 “数据库”,会出现包含 “数据库” 关键词的文档。但在飞书文档中搜索 “据库”,则无结果。“据库”作为一个词组既没有命中分词数据库,也没有文档匹配内容。但如果将词组隔开,我们还是能搜索到对应结果。

分词技术广泛应用于探索式搜索的产品场景中,通过对关键词进行合理的拆分和重组,可以召回更多相关内容,强调的是召回率。在内容资讯类产品中,通常会应用分词技术召回大量内容,以满足用户的查询需求。

3. 改写

改写指的是将用户输入的关键词调整为能和数据库匹配的内容。这对搜索功能提出了新的要求:作为产品经理需要知道用户可能会以什么样的方式进行输入并及时调整

改写具体可以分为三种方式:

  1. 纠错:改正用户的拼写,将错误的关键词纠正为正确的关键词
  2. 归一:将不同的语言表达但意思相同的词语统一转换为标准词语
  3. 扩展:对输入的关键词进行意义扩展,生成与其内容或行为语义相关的词语列表(关联搜索)

1)纠错

在百度输入 “appla” 系统会纠正为 “apple”,并以纠正词进行搜索。这是纠错在搜索中的运用。

相较于英文纠错,中文关键词的纠错更为复杂。比如通过拼音输入时存在模糊音、同音字的错误,通过五笔键入则会出现形近字错误等情况。

在腾讯的搜索技术文档中,鹅厂的技术同学将搜索的错误类型分为Non-word ErrorReal-word Error两种,分别指 “不存在数据库中的错误字符” 和 “由多个汉字组成的错误语句” 两种类型。

说起来还是比较抽象,来看看具体的例子:

以上这些场景在搜索引擎中被广泛使用,比如百度或者 Google。对于仅在产品内部进行搜索的应用来说,则可以根据用户搜索场景和产品定位进行优化,不要求搜索的准确率和复杂度。在平时使用电商、社交、工具类产品时可以留心观察,几乎不同产品的搜索纠错能力不尽相同。

2)归一

归一解决的问题是用户在日常表达中存在的语义差异。比如“价格”、“售价”、“价位”、“多少钱”、“怎么卖” 等表达都可以视作 “价格”。再比如 “作文写法”、“作文怎么写”、“如何写一篇作文” 等表达都可以视作 “作文写法”。

同样,还是以百度搜索作为示例:

3)拓展

拓展在上文已经有相关描述,参见 “输入关键词 – 联想模式”,此处不再重复说明。

四、召回

将用户的关键词经过解析,与数据库中的内容进行匹配的行为称之为召回。这个过程需要后端利用倒排索引技术,建立关键词和数据库内容之间的关联,以提高搜索查询效率。

简单来说,就是构建清晰的目录结构,便于快速查找目标内容。查询速度与召回环节的倒排索引建设质量直接相关。倒排索引建设得越合理。查询速度就越快。

这一部分属于我的知识盲区,感兴趣的同学可以搜索这篇文章:浅谈互联网搜索之召回

五、排序

当搜索结果不止一个的时候,通常需要进行排序。排序存在规则,合理的规则能够有效地展示关联结果,也能给企业带来不菲的营销利润,如搜索引擎的竞价排名功能。

一般来说搜索有两种排序思路。一种是根据匹配程度和参数进行排序。比方说在饿了么搜索我历史购买奶茶的记录,那么首先匹配的是关键词 “茶”,其次会按照时间倒序(参数)进行排序。

第二种方式是算法打分排序,展示更受欢迎的内容。比如说微信的“搜一搜”、今日头条、知乎等内容产品,会根据阅读量、互动量、点击率等多项指标来设计权重,并给每一篇文章进行打分,权重高者优先展示。

六、展示结果

1. 搜索成功

在完成一系列的复杂流程之后,终于来到了搜索的最后一个环节,结果展示。这是用户唯一看到的内容(实际上没有用户会在意你的技术流程啊哈哈哈),所以搜索结果的展示需要力求清晰。

目前搜索引擎都会基于不同的关键字展示不同的结果。在算法和用户画像的加持下也就形成了过去互联网产品渴望实现的 “千人千面” 能力。

如同上文中,搜索 “华为 mate60 售价” 会展示华为商城的跳转链接一样。搜索商品、人物、风景、概念都会出现不一样的搜索结果。

PS:百度搜索真的好多广告,只能用 Google 作为搜索示例了 = =、

其他产品的展示结果也在发挥着关键作用。比如一个男生或女生再淘宝搜索 “男装”,在排除推广商品后,看到的结果是完全不一样的。

同时,也需要注意到搜索结果经常出现一种糟糕的情况:看菜下碟。不同用户在旅游软件上搜索同一家酒店,价格会出现不一致的情况。这种行为在几年前经常被报道,如今相关的新闻变得很少了。

在游戏资讯类产品来说,展示结果相当重要。比如 Tap Tap 和网易大神。根据用户搜索的关键词不同,结果的呈现也各具特色。

关于搜索结果页的设计,我会在第四讲 – 券商搜索功能设计中进行详细分析,敬请期待~

2. 搜索失败

用户搜索并不能保证每次总是成功,在搜索内容和搜索规则无法形成匹配的情况下,需要考虑出现搜索失败的情况。一般来说,针对搜索失败场景的产品设计有三种类型:

  1. 乱码:可以理解为没有针对搜索结果出现失败进行设计,一般较少出现
  2. 分词:在无法精确匹配的前提下,搜索关键词中拆分出来单词和词组进行搜索
  3. 空态:展示一个搜索失败页,告知用户没有搜索到相关内容

搜索出现空态结果并不意味着好或坏。它可能意味着搜索功能欠缺了某些部分,也可能在无形中规范了用户的搜索行为。搜索出现空态或异常情况是需要进行跟踪的,这有利于产品及时进行调整,优化搜索规则。

七、小结

本篇的结论很简单,在设计搜索功能的时候,作为产品经理并不能面面俱到,要求功能达到大厂搜索技术团队的水准。我们应该做一个好的搜索功能,而不是做一个完美的搜索功能。

每一个产品的业务场景不同,功能重要性不同。即便百度和 Google 同为搜索引擎,但他们都有着不同的业务目标,更不要提产品的功能规划和团队的技术水平并不都是一致的。

在设计产品的时候要考虑性价比,ROI 最优的解决方案。在产品设计中更应该强调做一个好的产品,能满足用户需求的产品,而不是做完美的产品。

本文由@Brinkey 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自 Unsplash,基于 CC0 协议。

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!