在互联网信息爆炸的当下,主流的信息分发方式早已由算法替代,变成了被动获取;但被动的信息投放无法在每时每刻都满足人们获取信息的需求,所以依旧保持了主动获取信息的渠道——搜索。今天主要是简单的讲述下 “ 如何完成一个搜索流程?”
注:这里仅指搜索这个动作,而不是广义的搜索引擎(类似百度、geogle这种)。
搜索是用户主动发起的信息获取行为,所以有几个明显的特征:
①主动获取
②有大致的信息目标
③内容需求强烈
基于以上三个特点,我们可以看出搜索的过程是用户主动发起某个关键词的信息检索,并期望获得明确的搜索结果。根据这个过程梳理一下用户大致的流程预期:
点击/输入关键字➡点击搜索按钮➡获得期望结果
而在于系统层面,大致的搜索流程是,稍后会按照一下的流程对每个环节进行详细说明:
点击/输入关键字➡对搜索内容进行分词➡ES搜索➡根据打分权重输出排序列表➡搜索结果优化
①输入搜索内容
输入内容是客户端的流程,由用户来主导操作,所以需要注重交互设计。为了便于使用,通常会提供以下三种方式:
搜索历史:用户曾经搜索过的内容,进行二次搜索时不用重新输入,直接点击搜索历史即可
搜索联想词:用户输入部分内容后,快速给出一个用户可能想要搜索的内容列表,便于用户快速操作;内容来源一般是包含已输入字符的高频搜索列表。(这个搜索列表不仅来源于当前用户,而是系统用户,甚至通过其他三方搜索引擎接入对方系统用户的高频查询内容)
快速搜索列表:一般有热门搜索列表或运营手动维护的搜索关键词之类;热门搜索列表为当前时间全网用户搜索的热门内容topN;运营维护的内容就是各平台按各自业务需求进行配置;一般以按钮/文字链的形式展示在搜索页面。
以上三种方式分为两类:一类是快捷搜索(联想词&快速搜索),这种通常是点击关键词后直接执行搜索操作如果是用户在输入框输入的内容;另一类是手动输入搜索,这种是用户在输入框先输入搜索内容,输入完成后需手动发起搜索,通常会提供搜索按钮,有的产品也会在调起键盘时将输入键盘中的回车键替换为搜索按钮。
②分词
分词是指将用户输入的搜索内容,按照最小单元进行拆分,尽可能精确匹配到搜索结果。分词时会先通过词典查询用户输入内容的所有子集,将可以串联成完整内容项的子集进行保留,从子集链路中选择初最合适的方式
比如,“徐朝阳道歉”,可拆分子集如下:
【徐、朝、阳、道、歉】【徐、朝、阳、道歉】【徐、朝、阳道歉】【徐、朝阳道歉】
【徐朝、阳、道、歉】【徐朝、阳、道歉】【徐朝、阳道歉】
【徐朝阳、道、歉】【徐朝阳、道歉】【徐朝阳道、歉】【徐朝阳道歉】
当然这种从子集中选的方式效率比较低,词典树会更好一些。如果想要对分词的结果进行优化,可以对挑选子集链路的规则进行优化。
③ES搜索引擎
搜索的背后主要的匹配是通过ES搜索引擎来完成的,大概讲一下原理:将被搜索的内容进行拆分建立索引,存放进文档中,根据分词内容读取索引,找到对应的内容集
④列表输出
在获得内容集后,根据打分规则进行打分,排序,最后会输出有序列表。打分规则可能会内容匹配度、内容本身属性、甚至用户喜好等;如果业务需要在搜索页面,根据用户做不同展示,可以使用用户喜好,反之也可不用。
想要对内容有序列表进行优化,可以在测试或上线后不断对打分规则进行优化,甚至是不断挖掘用户关注点参与打分规则;根据线上CTR数据,做一定的效果参考。
本篇文章意在简单介绍一个大致流程,如有表述不当之处欢迎指正。
另,对于分词和ES搜索引擎两块比较技术性的内容,只是简单概述,想深入了解的朋友可参考一下两篇内容,我个人也是在不断学习这块,欢迎一起交流~
中文分词器的基本原理和简单实现:https://blog.csdn.net/wbsrainbow/article/details/88795312
ES搜索引擎-简单入门:https://blog.csdn.net/baishimingbaishiming/article/details/81839626