4、搜索系统:搜索行为分析、搜索算法基础、搜索结果呈现、搜索过滤与分面

搜索系统,说白了就是产品的「问路牌」。用户来了,想知道东西在哪,你得告诉他。我做了这么多年交互,发现很多产品把搜索当成了「万能药」,结果越搜越乱。今天咱们就聊聊搜索系统里那些绕不开的坑和技巧。

4.1 搜索行为分析:用户到底在想什么?

用户搜索时,脑子里其实就三件事:找得到、找得快、找得准。但现实往往是——用户敲了关键词,出来一堆无关结果,然后骂骂咧咧地走了。

我习惯把搜索行为分成三类:

  • 导航式搜索:用户知道目标,比如搜「我的订单」。这类搜索要直接跳转,别给一堆列表。
  • 探索式搜索:用户不确定要什么,比如搜「夏天穿的鞋」。这时候需要引导,比如热门推荐、分类提示。
  • 已知项搜索:用户明确知道名字,比如搜「iPhone 15 Pro Max 黑色 256G」。这种必须精准命中,差一个字都不行。

关键洞察:用户搜索时,平均只看前3-5条结果。如果你的搜索结果页第一屏没有他想要的,基本就流失了。

我在项目中遇到过一件事:一个电商平台,用户搜「运动鞋」,结果出来一堆「皮鞋」。为什么?因为后台把「运动」和「鞋」拆开匹配了。你想想看,用户看到这个结果,心里得多崩溃。

4.2 搜索算法基础:别被「黑盒」吓到

很多人一听到「算法」就头大。其实搜索算法没那么玄乎。我常用的思路就三个:

4.2.1 倒排索引

这是搜索引擎的基石。说白了,就是把「文档→关键词」的关系,倒过来变成「关键词→文档」。比如:

原始数据:
文档1:今天天气真好
文档2:天气不好

倒排索引:
天气 → [文档1, 文档2]
今天 → [文档1]
真好 → [文档1]
不好 → [文档2]

用户搜「天气」,直接去倒排索引里找,秒出结果。嗯,这里要注意:中文分词很重要。比如「南京市长江大桥」,分词错了就变成「南京市长/江大桥」了。

4.2.2 TF-IDF 权重计算

为什么有的结果排前面?因为算法算过「这个词有多重要」。TF(词频)是这个词在文档里出现了几次,IDF(逆文档频率)是这个词在所有文档里有多稀有。

举个例子:用户搜「苹果」。

  • 在一篇讲水果的文章里,「苹果」出现了5次,TF高。
  • 在一篇讲手机的文章里,「苹果」出现了3次,TF中等。
  • 但「苹果」这个词在水果文章里更「稀有」(因为水果文章少),所以IDF更高。

最终得分 = TF × IDF。谁分高谁排前面。我曾经踩过一个坑:没做IDF,结果「的」「了」这种词权重太高,排出来全是废话。

4.2.3 布尔检索与模糊匹配

用户输入「红色 连衣裙 长袖」,系统应该怎么处理?

  • AND(与):必须同时包含三个词。结果少但精准。
  • OR(或):包含任意一个词就行。结果多但乱。
  • 模糊匹配:用户打错字了怎么办?比如搜「连衣群」,系统得能猜到是「连衣裙」。

我的建议:默认用AND,但给用户一个「宽松搜索」的选项。比如在结果页加个「包含任意关键词」的开关。

4.3 搜索结果呈现:别让用户「找结果」

搜索结果页的设计,我总结了三个原则:

4.3.1 信息密度要适中

用户扫一眼,得知道这条结果是什么。我习惯用「标题+摘要+元数据」的结构:

  • 标题:关键词高亮,别超过两行。
  • 摘要:截取包含关键词的上下文,别从开头截。
  • 元数据:价格、日期、评分、来源等,放在摘要下面。

举个例子:

【高亮】iPhone 15 Pro Max 黑色 256G
...这款手机搭载了A17 Pro芯片,性能比上一代提升20%...
价格:¥9999 | 评分:4.8 | 库存:有货

4.3.2 分页 vs 无限滚动

这个问题我纠结了很久。后来发现:

  • 电商、文档类:用分页。用户需要精确跳转,比如「第3页」。
  • 社交、图片类:用无限滚动。用户想「刷」,不想停下来点下一页。

注意:无限滚动有个大坑——用户想回到之前看到的结果,很难。我建议加个「历史位置」标记,或者提供「回到顶部」按钮。

4.3.3 零结果页的处理

用户搜不到东西,别直接显示「没有结果」。我常用的策略:

  • 拼写建议:「你是不是想搜...?」
  • 相关推荐:展示热门搜索或同类内容。
  • 放宽条件:提示用户「试试去掉某个关键词」。

我曾经做过一个实验:零结果页加上「热门搜索推荐」,点击率提升了30%。用户其实不介意没搜到,但介意你什么都不给他。

4.4 搜索过滤与分面:让用户「切蛋糕」

搜索结果太多怎么办?用户需要「切一刀」。过滤和分面就是这把刀。

4.4.1 分面导航

分面,就是让用户从不同维度筛选。比如电商搜索「手机」:

维度 示例值
品牌 苹果、华为、小米、三星
价格 0-2000、2000-4000、4000-6000、6000+
屏幕尺寸 6.0英寸以下、6.0-6.5英寸、6.5英寸以上
颜色 黑色、白色、蓝色、红色

我习惯把分面放在左侧或顶部,并且显示每个选项的「结果数量」。比如「苹果(23)」,用户一看就知道选了这个还剩多少结果。

4.4.2 动态过滤

用户选了一个分面后,其他分面的选项应该跟着变。比如选了「苹果」,那「价格」分面里就不该出现「0-2000」(因为苹果没有这么便宜的手机)。

嗯,这里要注意:动态过滤对性能要求高。我遇到过一个问题:用户选了三个分面后,接口响应慢了3秒。后来做了缓存和预加载,才解决。

4.4.3 标签式筛选

用户选完分面后,最好在顶部显示「已选条件」的标签。比如:

[品牌: 苹果] [价格: 4000-6000] [颜色: 黑色]  × 清除全部

每个标签旁边有个「×」,用户可以单独取消。这个设计我强烈推荐,因为用户经常想「去掉一个条件看看」,而不是全部重来。

避坑指南:我曾经把「清除全部」按钮放在标签最右边,结果用户找不到。后来改成放在标签上方,点击率翻倍。位置很重要。

4.5 总结一下

搜索系统不是「加个搜索框」就完事了。你得想清楚:

  • 用户怎么搜?——行为分析
  • 搜出来怎么排?——算法基础
  • 排出来怎么展示?——结果呈现
  • 展示太多怎么切?——过滤分面

这四个环节,环环相扣。我见过太多产品,搜索算法做得很好,但结果页设计得一塌糊涂,用户照样流失。反过来,结果页设计得再好,算法不准,也是白搭。

最后说一句:搜索系统上线后,一定要看数据。用户搜了什么、点了什么、有没有二次搜索,这些数据比任何理论都管用。我每次改版,都会盯着搜索日志看三天,你会发现很多意想不到的「用户智慧」。