搜索引擎在互联网上已经很常见了。百度是最常见的大众化搜索引擎。淘宝也有自己的搜索引擎,它提供用户智能化的商品搜索功能。很多网站都会提供站内搜索引擎,目的是让用户更快地找到自己想要的资源。最近我发现在支付宝的app搜索框上可以搜索特定的功能按键,这的确是相当方便的。不过上述这些只是互联网上极小的一部分成功案例,与整个互联网网站数量相比,失败的案例可能更多。用户最常遇到的体验是无法在目标网站搜索到自己想要的内容,有时候内容的链接明明就在首页,但是从搜索框中却无法搜索到。有些网站为了避免搜索过程中消耗大量的系统资源,他们会限制搜索功能的使用权限,甚至只对数量极少的高级用户开放搜索功能。许多人在搜索论坛帖子时,常常就会遇到这个问题。
一些综合搜索引擎,比如百度,会提供站内搜索的插件。有些网站为了省事,会直接使用这些插件。很多时候,对于一个初创的网站,使用搜索插件提供用户搜索功能是十分便利和经济的。但是随着时间的推移,副作用也会渐渐显现,首当其冲的便是用户体验不好。虽然站内搜索插件自身的风格是可以定制的,可是当插件展现搜索结果时,便会本相毕露。

上图是我在网上找到的一个使用站内搜索的博客网站。博客本身的采用的是列表式的布局,左边的导航列占总体宽度大约20%,中间是内容展示,占总体宽度50%左右,右边30%的空间提供了一个搜索框和一些热门文章推荐的插件。站点还采用了天蓝色和浅灰色作为站点的辅色调。我在搜索框内搜索“站内搜索”的关键字,得到的结果页如下:

从页面的链接地址可以知道,博客站点的搭建者使用了百度提供的站内搜索,这个结果页面的布局也显然是百度的风格。对于博客网站的读者来说,这种略显别扭的体验可能还可以接收,如果是一些大型专业网站也使用这种方式,用户对站点的认同感一定是会发生很大偏移的。所以一些专业网站即使不愿意花精力为客户提供搜索服务,也会象征性的提供一个搜索功能来撑撑门面。显而易见的例子便是政府网站,很难在上面能找到老百姓关心的信息,即便这些信息是这个站点上发布的。


上面展示了我在上海市人民政府的官网搜索了在首页展示的热点新闻。我并不对这个结果表示失望,因为这并不是我第一次在政府网站上找不到真正有用的信息了。简单的吐槽后,我还是需要聚焦在这个系列的重点。再举一个例子,目的是为了说明像百度那样的通用搜索引擎已经有点跟不上现今飞速发展的网页开发技术了。我将展示一个我自己用angularjs做的网站,同时我还会在百度里搜索这个站点,读者可以根据结果自觉地发现百度的不足之处(当然它还有很多其它的不足之处,树大招风,后面的内容将更多的指出百度搜索的问题)。


我希望结果是不证自明的,网站使用了大量的js脚本,而百度不能解析这些js脚本,导致网站首页的大量信息被遗漏。如果你的站点也用到现在流行的js编程技术,拥有一个属于自己的搜索引擎将会是一个明智的选择。淘宝它不就是这么干了吗?
在后续的实践部分,我会偏重于站内搜索引擎的具体实现。但这并不是说,你不能用这些知识来实现一个类似百度那样的大型搜索引擎,恰恰相反,很多技术原理是通用的,但是限于篇幅和复杂性的原因,实现一个站内搜索引擎可能可以让大部分读者更有信心阅读或者坚持学习下去。
绪论的部分马上就要结束了,但是正如标题所想表达的意思一样,它也标志着一个崭新的开始。我希望读者在阅读完整个系列之后,能够了解搜索引擎背后的原理。如果碰巧还能跟随着一起动手做的话,那么回报也将是十分丰厚的。不过在继续阅读下去之前,我需要提醒一下读者,我会比较多的使用伪代码来实现各个技术知识点,这么做的原因主要是考虑到读者可能熟悉的编程语言各不相同,专注于一种语言是不公平的。你们需要自己来完成实践中的技术细节。
网友评论