站内搜索应用的方案设计的分析和总结

来源:互联网 发布:酷家乐设计软件 编辑:程序博客网 时间:2024/06/06 17:15

http://www.poluoluo.com/jzxy/200907/63759.html

我为银杏泰克站内搜索服务商做产品顾问期间,经手了十几个站点的站内搜索应用的方案设计,略作一些分析和总结。

一、站内搜索应用

站内搜索的应用受到越来越多的重视,以前出于技术成本和内容规模的原因,大家使用公共应用来凑合这个事,或者干脆没有。但是现在有钱了,信息量和信息类型的差异化和几年前也完全不是一个级别了,有越来越多网站对站内搜索有了极大的依赖。

对于分类信息、电子商务、点评类、视频和资源站,站内搜索应用简直就是生死线。

对于专业领域门户、综合社区网站、以及新型交互应用网站,站内搜索也在扮演着重要角色,拉升活跃度和流量,提升网站整体的信息质量。

站内搜索应用分为2个部分。搜索入口和搜索结果页面

1. 全局搜索入口的设计原则

  • 使用显眼的设计,全站统一样式和位置。位置通常是位于第一屏的居中或居右。

    搜索框
    搜索框

  • 搜索框中应有提示文字。(比如:请输入关键字…或者 关键字、分类、url…),以在视觉上标识该input框的功能或提示可行的操作。
  • 焦点功能。页面初始化时和input输入框失去焦点时 显示提示文字, 鼠标聚焦搜索框时 消除提示文字。(不要使用text框的默认值,我们曾在客户的统计数据里发现每天有上千条关键词为“请输入关键字”的搜索请求,浪费资源。更不要使用背景图片-_-!!!)
  • 输入词智能(模糊)匹配提示(search suggest),这个最近也逐渐成为标配。最初此功能用于在拉丁语系网站中协助拼写,现在发展为通过和本站内的搜索请求的趋势关联,智能提示的搜索词可以在一定意义上引导用户进行集中而热门的搜索,获得更有效的结果,以及拓展的关联搜索。
    输入词智能(模糊)匹配提示,search suggest
    />

2. 分类搜索和搜索结果分类

许多网站会在全局搜索入口中放置分类搜索下拉菜单(select)。

  • 好处:对于通用搜索和拥有复杂信息类型的网站而言,可以帮助熟练用户精确搜索目标,减少点击次数。
  • 坏处1:根据我们掌握的多个各个类型的站内搜索log结果分析,这个分类下拉的使用率非常低,不足2%。
  • 坏处2:互联网用户的搜索习惯是被通用搜索引擎培养的——直接输入关键字。用户总是先直接输入关键字,除非发现找不到结果,才会返回来寻找并使用分类搜索下拉,这样设计反而变成是反用户的了。

许多设计师混用了 “分类搜索”和“搜索结果分类”这2个概念。

分类搜索:针对不同信息数据类别,搜索需求间有互斥性,分类搜索的搜索结果间不存在交集。

搜索结果分类:针对不同内容类型,将某一搜索需求 按不同维度的属性进行的二级分类或筛选,搜索需求是一致或可容的,结果之间可能存在交集。

我们拿豆瓣的分类下拉菜单举例:
豆瓣搜索下拉菜单

书籍/电影/音乐都是属于内容类型,(且输入框的提示把它们同质化了)。它们之间是搜索结果分类的区别。

内容和小组、成员、活动是同级别的类型。它们之间是分类搜索的区别。

用户搜索“暮光之城”,用户不会排斥在结果中同时得到“暮光之城”的电影类、书籍类、原声音乐类信息,都是对内容的搜索需求。但是可能会排斥小组/活动/成员类型搜索结果。想搜索小组和想搜索活动是完全不同的需求,一个想搜仅仅想搜索书籍信息的用户并不想看到小组中的讨论。
_________________________________________________

再来看淘宝的全局搜索入口:

 淘宝全局搜索入口
宝贝、店铺、打听是不同的搜索需求,它们是分类搜索的区别。

商城、拍卖、全球购 和宝贝都属于同一内容类型,搜索需求一致,信息结构是父子级的关系。它们也属于搜索结果分类
这3个分类是否有单独作为分类搜索存在的必要,你使用过这3种分类吗?

下列设计搜索入口的一些方法和原则:

  • 避免过度设计。对于搜索目的或内容类型单一的网站,放置分类搜索下拉是不必要的。比如专业视频网站,餐饮点评网站等等
    这是一个专业视频网站,从图1和图2中可以看到,虽然分类搜索里选择的视频和专辑这2个分类,但是当选择视频分类去搜索时,还是会在第一行输出了专辑类的搜索结果。

     专业视频网站搜索结果页面  搜索结果分类

  • 把搜索结果分类放到它该去的位置——搜索结果页面通过统一的搜索入口进入搜索结果页面后,用户可根据此列表了解 搜索结果的分布,筛选所需分类。
    这种设计可以清晰地展现信息结构,信息规模,帮助用户明确搜索目的,精确筛选。

     

    1 简单化处理:在全局页面放置通用搜索入口,不带分类下拉。同时在频道页设置单类的搜索入口。2 复杂化处理:在首页放置高级搜索工具箱
    (不可代替通用搜索框!)在频道页设置单类的搜索入口   高级搜索工具箱
  • 尽量避免存在多个分类搜索之间互斥的设计
    你是否遭遇过直接在淘宝的input框中输入店铺名称而得不到任何有效结果?
  • 使用Tab manu (选项卡)代替 下拉菜单。
    你更习惯的是下面哪一种的方式?

     搜索,选项卡

  • 有些分类选择可以用高级搜索选项来代替 高级搜索筛选 在这里 使用高级搜索中的筛选来表现可能会更好。  高级搜索筛选
  • 在需要使用多重维度的搜索条件来定位时的处理
      多搜索条件定位

     

    比较两者的设计,高下立现。

3.全局搜索结果和分类搜索结果

当一个网站同时拥有全局搜索入口和单类搜索入口。会产生一个问题:单类搜索可得出单一精确的搜索结果,而全局搜索得出的结果页面是多种单类搜索混合而成的。如何处理好这种混合,并有效引导用户得到自己想要的信息?

1 最简单的方法: 混排+分类标签。

 搜索结果混排

2 华丽的方法:分区块显示。(对服务器压力较大,分区块搜索会形成多次请求)

  搜索结果分区块排

分区块显示要根据网站自身的产品特性和内容重心来安排,

不能不分详略,事无巨细把所有类型都均等地列出来。多信息等于无信息。

二、搜索结果页面布局

1. 常用功能模块

 站内搜索常用功能页面

 站内搜索所有功能模块设计DEMO

点击小图显示大图

上图只是是为了演示所有通用功能模块的设计demo。并不建议像这样设计产品,用户根本不会用到那么多功能,过度设计会导致开发成本和用户的学习成本大大增加,也使页面零乱。

应该根据各自网站的资源、优势、类型、目的来选用恰当的模块进行设计。关于这一点请见后文

2. 布局问题

先来看2个案例

  4栏搜索结果案例

上图为4栏的机票搜索结果页面,中间2栏为往返双程的搜索结果。信息密度太高,页面拥挤,用户在寻找自己所需的结果时,视线会不断被干扰。在左栏纵向放置的筛选功能区块,位置和高度导致用户的正常使用流向被打乱,最右边的推荐和广告区也很难吸引用户阅读和点击,

双栏搜索结果案例

上图是2栏的机票搜索页面。页面布局宽松,信息密度分布正常。日期的Tab Manu、筛选功能区和搜索结果区的分布和排序符合用户使用流程。 右侧的推荐信息区也容易吸引用户视线。

搜索结果页面的布局原则是简洁、突出重点、目的明确。不能分散用户获取搜索结果的注意力。

下面是一些设计建议

  • 使用两栏布局。内容型搜索建议比例为三七开,不要让搜索结果内容区过宽,影响阅读体验。
  • 剔除无关元素,对于网站统一布局中的公告、推荐、广告、排行之类的元素,应该割舍。布局越清晰明了,干扰元素越少,用户越容易顺利达到使用目的。
  • 主搜索框 位置全局(或主内容区)上方居中。在搜索结果页面,搜索框不必和全局设计统一,缩于一角。
  • 处理好多个搜索框之间的层次关系(在同时存在 主搜索框和单类搜索框/高级搜索工具箱的时候)。
  • 信息密度不要过高。不要试图在搜索结果中列出所有信息元素。
  • 筛选、排序等功能区要注意产品逻辑和分布层次。很多设计师在处理信息的多个维度缺乏逻辑和结构意思,弄得页面看起来有4~5层横导航。
     失败的筛选区设计

     

    这一堆选项卡,你眼花吗?

  • 根据内容属性的不同,对搜索结果使用合适的显示模式。(图片、缩略图+内容、内容列表、表格、内容+表格 等)
  • 正常搜索结果和 推广类搜索结果(竞价或广告)的设计应该有清晰的区分,让用户能很容易区分这两者。
  • 搜索结果中的 匹配关键字 应高亮显示

网页制作poluoluo文章简介:我为银杏泰克站内搜索服务商做产品顾问期间,经手了十几个站点的站内搜索应用的方案设计,略作一些分析和总结。

三、不同类型网站的站内搜索应用特点

站内搜索普遍意义上可以分为两类:内容搜索和比较搜索。特殊搜索(如地图搜索,)不在讨论之列。

典型的内容搜索:新闻(资讯)、视频、图片、音乐、人、论坛(小组)、帖子。对于内容搜索,基于分词的全文搜索是主要应用,通过分词、概率等对数据进行筛选排序,得出匹配度高的搜索结果

典型的比较搜索:购物、餐饮、旅游、租房。 分类、筛选、排序等功能更为重要。搜索结果和用户行为关联更大。有大量基于数据库的搜索。

1. 内容(帖子、话题、博客)搜索 。

内容搜索 产品原型

  • 主要应用: 相关度排序。
  • 引导流量:相关内容推荐
  • 布局特点:不需要过多的功能模块,比如高级搜索、二级分类、筛选和排序。而应该重点优化设计 搜索结果、关联搜索、结果类型分布。

2. 新闻类搜索 最重要的是时效性

  • 主要应用: 更新时间+相关度排序。 为什么把新闻类搜索从内容搜索中单提出来说,因为新闻搜索的结果排序,更新时间要的优先级要高于相关度。如果不注意这一点,会出很严重的后果。
  • 引导流量:热门关键字,“你可能还对这些关键词感兴趣”
  • 布局特点:同内容类搜索。

新闻类搜索还有一个高级应用,就是新闻关键字的趋势比较。一般网站可能没有这个开发实力和预算,只有成熟的SaaS才有可能提供类似的高级应用。

3. 多媒体搜索 图片/相册/视频/音乐

多媒体搜索 产品原型

  • 主要应用: 分词+过滤,因为许多图片的alt是直接使用文字标题,所以正确的分离出关键词很重要。

图片常用的过滤包括:文件类型、图片尺寸、风格、图片色调。

视频由于没有统一的描述协议,暂时也没有成熟的OCR技术,所有视频搜索主要基于tag,数据库分类和人工填写的描述。视频常用的过滤包括:分类、时长。

音乐常用的过滤包括:文件类型、专辑、歌手、风格、语种、源状况

  • 布局特点:图片和视频类搜索由于结果的展现主要是缩略图,搜索结果区域的面积要尽可能大,建议使用全屏单栏设计。图片搜索需求的目的性很明确,除过滤外,没必要放置其它功能属性和关联搜索。

多媒体基本都存在专辑或系列,专辑和系列是基于人工分类的更准确的检索方法,包含更大的信息量。应当通过精确匹配后,优先列在搜索结果中。

4. 用户搜索:

  • 主要应用:高级搜索、重音或拼写纠错提示。
  • 引导流量:“搜索该词的用户还关注什么”,“你可能还对这些关键词感兴趣”

对人的搜索应使用精确匹配,根据数据类型支持高级搜索选项的过滤,还有一些特殊的比如在线状况、活跃程度、信用等级等。
对于人名应提供重音和拼写纠错提示。

5. 消费搜索:

消费类搜索在过类别属性的侧重点上有很大差异,购物搜索:价格、信用、热度。租房搜索:匹配度、地域、价格、其它属性。餐饮搜索:地域、菜系、热度、价格。旅游搜索:时效性、价格、折扣

消费类搜索 产品原型

  • 主要应用: 多维度属性过滤,支持多种排序,多种搜索结果显示形式、搜索结果对比。
  • 引导流量:搜索结果(竞价推广),“搜索该词的用户还关注什么”,“你可能还对这些关键词感兴趣”,热门关键字、历史记录。
  • 布局特点:应该重点优化设计二级分类、筛选、排序等模块。

一个消费搜索的产品设计是否成功?我觉得有一个衡量方法:看用户是否可以通过不打任何字,光用鼠标也能顺利完成检索需求。
站内搜索的筛选设计

四、高级搜索功能的设计

分类、过滤、排序这3个是应用最普遍的高级搜索功能。

分类:帮助用户逐层定位所需搜索范畴,一般通过罗列所有分类项的方式展现,可一级级展现多层列表。

站内搜索的分类设计

过滤:通过在搜索结果中排除某一维度中的某个或多个属性 来帮助用户剔除不需要的搜索结果。一般通过单选、多选、下拉菜单、选项卡、标尺等形式展现。

排序:帮助用户按某一属性对搜索结果进行重新排序。

1. 排序的设计

排序看起来简单,但是有问题的设计确很多。

  • 不分正序倒序

     

    人均花费排序,不分正序倒序,那默认是从高到底,还是从低到高呢?右图是较好的设计

  • 使用排序按钮,但是表意不清,增加用户学习成本
    排序按钮的设计
    猜猜左图4个操作排序的按钮分别是什么意思?销量、价格、折扣、上架时间。(除了第二个,其它我打死也想不出来)
    右图是较好的设计
  • 未明示哪些选项可允许排序操作
    未明示哪些选项可允许排序操作
    这里面有些允许排序操作,有些不允许。用户在点击的时候都得小祈祷一下…
  • 排序和过滤功能混淆在一起
    排序和过滤功能混淆在一起

     

    图中有一堆看起来功能相似的下拉菜单,但里面有的是排序操作,有的过滤操作。排序操作不会减少搜索结果,但过滤操作会。用户点击完其中某个下拉菜单,可能页面中搜索结果就为空了,用户能搞清是自己干了什么导致的吗?

  • 默认排序是什么?
    正确的排序设计
    上图 排序下拉菜单的设计非常好,同时有下拉菜单和按钮,同时有文字说明和图示箭头,一目了然。
    但是谁能告诉我,默认排序是基于什么的排序?
    常规意义上默认排序是基于相关度的排序,是认为用户无法理解相关度这3个字吗?

2. 过滤的设计不好用的过滤器

分类和过滤是两个容易混淆的概念,最常见的错误是把分类 设计成了过滤,让产品反而很难用

如右图:这只是多组看起来像过滤器的分类列表而已,用下拉菜单的设计形式来代替索引链接,用户品牌维度下:用户只能选择某一个品牌,匹数维度下:用户只能选择一个固定区段。

一个真正的过滤器应该能允许用户在终于的信息维度上,自由取得或排除部分搜索结果。

下面是两种功能的正确设计

正确的站内搜索筛选功能设计

另一个常见错误是使用错误的表现形式来破坏用户的筛选自由度

单选模式的筛选功能

如上图:如果我理想的出发时间是在8:00~10:00之间,使用这个过滤器,我就得搜索两次。

而下图这两种都是不错的设计模式。

自由划分区间的筛选功能

当我搜一个酒店,只想去7天、如家、汉庭这几家,要求有免费宽带和餐厅。

如果是品牌和设施这两个维度的筛选形式做成了下拉菜单、选项卡或单选框,就只能歇菜了。

最好的设计是将搜索选项做成多选框,用户可以任意组合。
排序和过滤功能混淆在一起

如果搜索页面空间比较紧张,没有太多位置放置筛选过滤器,下面的设计也是一个办法。将排序和筛选结合起来。

混合类搜索和筛选功能

3 高级搜索:

高级搜索是一个比较传统的应用,它的特点是给出了多个input框,指望用户通过在固定位置输入每个维度的关键字,来获取精准的搜索结果。

问题是如果用户输错了一个地方,可能就得不到任何有效结果。

下图的设计让用户很容易输错。

不好用的高级搜索

下面这个改进过的高级搜索要好用得多,除了减少用户动脑子想关键字的时间,动键盘打字的次数,关键是能是输入条件规范,不会出现用户的理解错误或输入格式错误。

不好用的高级搜索

网页制作poluoluo文章简介:我为银杏泰克站内搜索服务商做产品顾问期间,经手了十几个站点的站内搜索应用的方案设计,略作一些分析和总结。

五、站内搜索的其它应用

1. 流量引导

针对站内搜索本身,流量引导的主要方式是关联、推荐和热榜。
关联: 包括搜索结果关联、关键字关联 和推荐内容的关联
。如,关注该关键字的用户还搜索过,买了此类宝贝的用户还买过
推荐:根据用户搜索的需求分类 推荐相关的网站内容或商品。

热榜:热门关键字排行,或上升快的热门关键字排行。

2. 特殊情况的设计:

当用户的搜索行为无搜索结果时、用户的搜索行为有输入错误或障碍、搜索结果过少时。

由用户行为造成的无结果或少结果,有下列几种状况:

  • 用户拼写错误。
  • 用户输入了限制过多的关键字条件
  • 用户误操作。

处理上述状况,首先应该由程序判断是否存在输入的拼写错误,在搜索结果之前首先提供纠错建议,提示和引导用户进行有效的操作,并根据数据挖掘,提供能满足用户搜索需求的有效关键字。如:“没有找到相关结果,不如试试搜索****。”等。

如用户输入了过多的关键字条件,(如用户直接在搜索框里粘贴了一句很长的话,且搜索设置为多关键字之间的匹配关系是与运算)应建议用户使用正确的条件输入方式。

误操作的状况多出现与用户直接点击了搜索按钮而没有输入关键字。这种状况不同网站有不同处理。如同页面刷新、跳转到搜索结果页面但提示误操作、blank跳转到目录或索引页面、js弹窗提示误操作。

非用户行为造成的无结果或少结果,有下列几种状况:

  • 分词错误:例如人名、专有名词、地名等专业词汇被错误地分词,造成有效结果不多。
  • 无有效数据

上述状况都应该在搜索功能的管理设置中有所反映,必须有手工补充关键词库的功能。必须能对少结果或无结果的关键词进行数据统计,以帮助决策内容维护方向。

另一种状况是当搜索结果过多时:用户输入了一个涵盖范围太广的关键字,搜索结果多于20页的时候。

宽泛的关键字定义不能帮助用户有效完成搜索目的,用户翻20页以上去检索的可能性很小,对网站性能也会造成不必要的浪费。

所以在搜索结果页面提供分类和筛选是首要前提,也应该在适当的位置体现用户使用关键字组合的正确方法或使用分类、筛选功能。

在分页设置上,可以以只显示20页为一个区间。

3. 内容价值的优化处理

在论坛、知道、百科之类应用中,设计者比较不愿意看见的一个状况就是问题和条目的重复,既浪费资源、分流用户贡献的有价值内容,也不利于信息组构。(流量膜拜主义的不在此列)

这类应用中,可在用户提问、发帖的title输入框旁边放置搜索提示或搜索框,引导用户在提问之前先搜索。

这个类应用可以通过搜索功能对内容价值进行优化。

4. 海量信息或历史内容的价值最大化

对于新闻、资讯、论坛站这类海量信息站而言,信息结构的设计是极为重要的,仅将内容价值建立在热门话题和更新速度上,是一种不明智和浪费的运维思路。好的信息结构设计,让用户不会在扫完热门和更新内容后就无事可做,降低用户跳出率、提高单ip的页面浏览数。设计思路除了明晰合理的多级信息目录结构,还应该根据运营需求建立起 话题眼、新闻脉络、信息时间轴 等内容聚合点和内容聚合线索。

搜索和数据挖掘是帮助优化此类设计的重要选择。

百度贴吧的伟大之处在于极大地发挥了由搜索关键字创建话题眼这一设计。

说到这,可能有人已经联想到了 tag 和 埋在正文中的关键字链接

对于论坛 或 非正规的信息站而言,通过tag来支撑一套信息维度是不现实的。

而正文中埋链接,多用于 产品库(名人库)这类专有词,主要用于导流量,在文中高密度使用也是不现实的。

所以使用分词技术或词频分析,在某篇文章中获取核心关键字后,在侧栏或标题/正文下方列出,是一个很好的处理方法。这种流量引导方式比“相关新闻”赋予用户更大的选择性,也更利于用户深度挖掘内容发现内容。

通过处理发布时间排序,可以形成以时间为脉络 新闻线索。

银杏搜索和我曾经提出一个概念产品设计,用于大型新闻/资讯网站的新闻搜索,让新闻关键字成为一个信息时间轴。

这个产品可根据某个关键字的搜索结果在时间轴上的分布,按时间区间输出搜索结果量的指数图,体现出到该关键字的新闻性时间趋势。

当鼠标移上某个节点,会显示该节点的日期和详细结果数。

用户可以通过点击年份,放大趋势图,查看某年的搜索结果的详细指数图。

这个产品可以很容易通过时间体现新闻趋势,强化传播的时间维度上的表现力,用户体验新鲜,更重要的是可以利用埋藏着的历史信息实现价值最大化。

这个应用还可以扩展为更高端的趋势比较。当用户输入2个以上的关键字时,可以在指数图中看见两个关键字的对比折线图,用户可以对两者搜索结果在时间分布上进行趋势比较。

5. 应用于内容发布系统

站内搜索除了在前端使用,在信息发布系统中也有重要的应用。典型例子的是帮助使用者筛选相关新闻(包括专题组织中的相关新闻列表)。

我讲一个我遇到过的案例:传媒类网站的cms系统,最初的设计:使用者点击“查找相关新闻”按钮,blank弹出结果页面,搜索条件直接取值于文章title和tag,全文检索。但使用者总是对筛选出来的相关新闻不满意,觉得匹配度不够高。

例如

当使用者 为 ********(上)查询相关新闻时,当然最希望出来的是*******(中)和*******(下),但是标题被分词以后,再加上tag,由于词频权重的原因,中和下篇可能并不是排在前头。

当使用者为一篇标题里包含 美国银行 这个词的文章查询相关新闻时,排在前几位的可能和美国银行没关系,而是奥巴马竞选或中美外贸。这是因为美国银行会被分词,拆为美国和银行,出现美国或银行频度最高的文章会被排在最上面,如果美国和银行之间采取 或运算 的话,结果就更糟糕。

经过沟通和分析使用者需求,我把一个“查找相关新闻”按钮,拆分成了3个按钮,以满足使用者不同的搜索意图。

  • 按钮1 “根据标题精确搜索”,用于查找系列文章,多个关键字之间采取 与运算,满足精确关联需求。
  • 按纽2 “根据作者搜索” 仅匹配作者字段,用于精确查找该作者写过的所有文章。
  • 按钮3“相关性搜索”,匹配title分词和tag,满足查找宽泛关联的需求。

客户此后就满意了,几乎不再需要手工自定义搜索条件,提供了处理效率。

这个案例的启示是:1 站内搜索的应用设计中,搜索条件提取、多关键字的处理、匹配字段的处理 这些设定的变化,能对搜索结果、应用效率造成巨大差异,好的应用坏的应用由细节中产生。2 通用化设计往往是最不易用的。

网页制作poluoluo文章简介:我为银杏泰克站内搜索服务商做产品顾问期间,经手了十几个站点的站内搜索应用的方案设计,略作一些分析和总结。

六 站内搜索的开发

我写下面的关于站内搜索的开发,是尽量用浅显的语言来解释开发原理和程序请求的流程,主要给非专业的技术人员看。

我一直非常反感有一些搞产品、搞UED的人会说几个名词 就认为这行好混的不得了,不研究也不学习,有的不看数据也不动脑子,有的看见了数据也不动脑子。 连一行数据库查询语句都不知道就敢说自己是研究信息架构的,我呸。操作了这个仪那个仪就觉得自己比开发人员还牛逼了,还替行业操心起出路来了。唉,这个行业如果哪天忽悠能少于50%,就算是有出路了。

搞产品应该懂得起码的开发原理,不要浮于专有词汇的表面。况且了解原理这事只要破除迷信,多读点真东西,一点都不难,也没有什么所谓的学科门槛之类的。我很想写一篇《搞产品应该懂的数据库命令》,来破除下非技术人员的代码恐惧症。

站内搜索的技术流程是:

  • 第一步 提取原料:抓取网站页面或格式化数据
  • 第二步 把原料归类:建立索引,把关键字和页面一一对应上,分类放好(想象一下老式图书馆里的归档管理方法就能形象理解索引了)
  • 第三步 听用户要上啥菜:响应用户的搜索需要,对用户输入的关键词进行分解,从索引中找到符合该关键词的所有相关网页。
  • 第四步  摆盘上桌:对搜索结果页面进行排序,将页面标题、url、摘要等信息呈现给用户。

一步步细说:

第一步:提取原料:抓取网站页面或格式化数据。

抓取页面是使用一种叫蜘蛛的程序,一个网站中成千上万个页面是通过什么关联起来的?url。蜘蛛就是通过一个页面的url找到另一个页面再找到另一个页面,把所有能链到的页面遍历一边,记录下来。

通用搜索引擎(google baidu)的蜘蛛 很复杂,因为一个页面上可能有很多个url,每个url又关联着无数页面,整个网络像一棵树,假设首页是第一层,首页上的url关联的页面是第二层,第二层页面上url关联的页面是第三层……

蜘蛛抓取的顺序就会很重要,是沿着一个url一直爬下去,还是先爬完一层再爬一层;加密或需要用户登录后才能访问的内容怎么抓取;pdf、rar及多媒体文件怎么抓取,都有讲究。不同的抓取处理在有效性、效率和对 被爬网站的资源占用 上有很大差异。

当然站内搜索没有那么麻烦,一般是技术人员根据希望被纳入搜索的内容数据库 生成一份格式化的 xml文档,让蜘蛛直接抓取就行了。但是站内搜索在提抓取页面更新索引时,有一个指标比较高,那就是抓取的更新频率。

比如对于电商类网站,某些商品,特价、抢货啦,可能刚发布出来5分钟就卖完了,或者改价格了。但是用户听说促销啦,来网站上一搜,搜不到,或者搜到了点进去发现价格不对,用户就会不舒服。 这就是蜘蛛抓取页面的更新频率过低导致的。要解决这个问题并平衡性能与资源占用之间的矛盾,需要多种算法进行优化。

通用搜索 比如google、twitter在做这方面的努力,也就是做成实时搜索。但是站内搜索服务还鲜有尝试者,霍炬和余晟最近在做针对电商类的优化。目前可以做到即时更新,也就是发布后1分钟内就可以被搜索到。

第二步:把原料归类:建立索引。

建立索引这一步 集中了搜索引擎 的两大核心技术难点:索引结构和中文分词

如果按照正常人的思维,索引应该是这样建立的:

  • 把每篇文章存在文章索引表里(假定我们叫它doc索引),然后解析出该文章中有多少关键字,把关键字存在一个表里(我们叫它keyword索引)
  • doc索引的大致结构就是:docID  | doc标题/内容 | doc的url及其它信息 | doc中每个keywordID 。
  • 当用户输入关键字搜索的时,先找到关键字对应的keywordID, 然后查找到有哪些doc里包含做这个keywordID。

这种思路很符合逻辑,但是不好意思,在效率上几乎是不可行的。

因为在查找哪些doc里包含这个keyword的过程相当于 哗哗哗狂翻一本书来找里面的一个词。网站的doc索引条目动辄上万上十万,要是同时查找多个关键字,相当于多次狂翻一本十几万页的书,你说是不是累死了。

于是 就有一种更符合 程序运行方式的 索引建立方法。这就是倒排索引,也叫反向索引。 而上文中提到的符合正常人思维的叫正排索引

倒排索引中“倒”的含义是指把doc索引和keyword索引的关联次序颠倒过来。在建立索引的时候,先建一张keyword表,结构是:“keywordID  | 关键字 | 存在哪篇doc中的哪个地方 ”

“存在哪篇doc中的哪个地方” 这个信息怎么表示?

通过一种叫映射的方法。通俗地举例:“北京”这个词出现在 id为0011文章的第2段第5行第3个字,可以表达为一个字符串 0010p2l5f3,所以“北京”这个词在keyword表里是可能这样写

“ k001 | 北京 | 0010p2l5f3 , 0010p5l1f9,0012p1l2f6……”

这是一个平面的结构,实际程序中当然不会这么简单处理,这样效率还是太低。会处理成一个有层次的结构,比如第一层只存docID  “k001 | 北京 | 0010,0010,0012……” ,第二层再存是属于哪一段哪一行等。

这样做的好处是 可以在第一层实现一次归并。因为搜索结果页面最先需要列出的只是那篇文章里包含哪个关键字,不需要具体位置,所以,当北京这个词在0010文章中多次时,第一层索引可以归并为为 “北京| 0010,0012 “ 这样结构又精简了。

索引的结构及存储方法对 搜索速度起致命的影响。

分词: 中文分词技术是中日韩专属的一个的高难度课题,研究了十几年了。而英文每个单词之间都有空格,没这个麻烦。

比如 “作家长平时常翻阅这本书” 这句话 人可以分成“ 作家 长平 时常 翻阅 这本 书”。但是计算机可能就分成了“ 作 家长 平时 常 翻阅 这本 书”。计算机不认得长平三个人名,分词错误就用户搜索长平的时候就得不到这条结果。

再例如,当用户输入 “和服”搜索时,出来第一屏都是 “产品和服务”,“化妆和服装自己搞定”,用户是不是很郁闷。

所以分词技术 对于 搜索的准确有效性 起关键作用。

基础的分词方法是机械切分,也叫二元切分。以2个字为一个单位进行切分,不进行判断,比如 中华人民共和国 -> 中华 华人 人民 民共 共和 和国

在此基础上进化出了双向最大切分,就是把一句话切成最小词单元,正向切分一次,再反向切分一次,比较下哪个更合理,再通过复杂算法识别出有效关键字。

更先进的方法是在机械切分的基础上使用合理的词库,地名、品牌名、机构、简称等需要词库。而不同行业如金融类、计算机类、商品类都有不同的专业词库。

还有基于人工智能和统计概率的分词算法,但是对于站内搜索这个量级的都不适用。

对于站内搜索而且,除了好的分词算法,更重要的是词库添加和统计功能。网站管理员可以根据用户搜索行为的统计分析 手动向词库内添加新词。

第三步:听用户要上啥菜:响应用户的搜索需要

  • 用户输入的搜索条件可能是一句话,所以对用户搜索请求的解析也要用到分词技术。如果搜 “吉野家沙拉” 和 “吉野家 沙拉” 会得出不一样的搜索结果,就是比较差的搜索引擎了。
  • 用户输入的关键字是对词库的有利补充。比如搜全聚德的人多了,全聚德显然是一个有效的专业词汇。
  • 多个搜索关键字之间存在逻辑运算关系。逻辑运算。。不要怕,搞设计的人应该都知道布尔运算。。不知道?总知道反选、多选、选区交集吧。这就是逻辑运算中 非运算(not)、  或运算(or)、 与运算(and)

用户的搜索条件是“美国 金融危机”如果采用 或运算,则文章中只要包含了 美国 或 金融危机 这两个词中的一个,都有可能被列为搜索结果。 如果采用 与运算,则只有同时包含了 美国 和金融危机这两个词的文章 采会被列进搜索结果。

所有搜索引擎都应该在输入搜索条件时,支持逻辑运算符。

对于通用搜索引擎,一般 多个关键词之间的空格 就默认代表了是 与运算(and) 的关系。可以通过输入逻辑运算符 来完成其它搜索需求。比如 可以使用 “哈希 OR Hash” 来搜索更多关于哈希算法的信息中英文都有, 也可以使用 “小李飞刀—电视剧” 来搜索除电视剧外的小李飞刀的信息。

对于站内搜索,1 没有通用搜索那么大的数据量 2 比搜索引擎专业性更强。所以站内搜索 多个关键字之间的空格 默认代表的是 或预算 的关系。但是会在呈现结果的排序上做文章,通过多种算法计算出相关性最高的文章排在前面,相关性弱的排在后面。这样可以帮助用户发掘到更多 关联性内容,结果呈现也更人性化。这是通常定义下的 站内全文检索 的一个重要特征。也是区别于数据库搜索的技术优势。

响应用户搜索条件的时候 还有字段匹配及权重的问题,一篇doc 可能有标题、摘要、正文、tag、作者等多字段信息存在doc索引库里。Keyword是出现在标题、摘要还是正文中时,权重是不一样的。

第四步 摆盘上桌:对搜索结果页面进行排序,

琢磨过SEO的同学一定知道,所谓搜索引擎优化 1是让蜘蛛能抓取自己网站上更多的页面2 让自己网站的页面在搜索结果里能排得更靠前。

这就要研究搜索引擎的排序算法。对于各个通用搜索引擎,排序算法是许多人的关注核心,每次权重调整都会带来巨大震荡。通用搜搜引擎都是在基于相关性排序上在加上各自的算法,如Google的专利pagerank就是通过页面之间的互链来判断页面的价值高低,再加上链接引用页面的PR值、是否在一个分类等 各种其它指标。

但是站内搜索,用互链这种方式来判定显然不靠谱,所以主要还是通过优化相关性的算法,计算keyword和DOC之间的关系,例如 keyword 在doc中出现的密度,词频, doc是否和 keyword 属于同一语义类别,doc的长度属性(短的doc应该降权之类的)等判定 keyword的搜索结果中,哪些doc更重要更有价值。

多个关键字的搜索条件,让算法更复杂,如何对多个关键字进行比较、两者的结果如何合并,两者的结果顺序如何穿插重排。

最后还要利用算法来优化 结果排序的速度和稳定性

由此 才能得到站内搜索的相关度排序结果。

————————————————————————————

上面基本讲了站内搜索的原理,看到这会有很多人觉得站内搜索的开发是一个技术要求很高的应用。也的确是这样,一般网站很难养得起一批能开发搜索引擎的工程师,开发周期上也承担不起,关键也缺乏持续改造的动力。产品设计人员也很难想在这个重要应用上有所发挥,对产品进行一点优化和改造都会牵扯到巨大的开发工作量和成本压力。

搜索引擎核心和分词 现在有一些开源代码或开源词库可以使用,也可以选择租用成熟的站内搜索服务来解决开发问题。使用SAAS (软件即服务模式,现在一种流行的技术外包服务模式) 的优势在于可以根据网站的去业务逻辑定制搜索模式,且搜索这部分的数据结构是单独建立重新格式化过的,对站内搜索进行产品改造不会对网站本身的业务逻辑和数据结构造成任何影响。也可以不占精力成本地享受产品改造技术升级的好处。

0 0
原创粉丝点击