如何制作一个搜索引擎
我打算写一本介绍搜索引擎制作的书,目前想边写边发,希望大家看了能给点反馈。题目就是“如何制作一个搜索引擎”
前言
现在市面上有很多介绍如何制作搜索引擎的书籍,我在书城也曾随手翻过一些,不过大多是书太厚,话太多,有种浪费生命的感觉。回想当年带我入门的那本书是阎宏飞写的《搜索引擎》,靠着这本书,我积累了关于搜索引擎的基础知识,之后再加上老外的论文,最终完成了自己的硕士毕业论文。《搜索引擎》这本书主要阐述了搜索引擎的核心概念和思想,而在具体到实践上则点到即止。我在做网站时积累了一些实践的经验,于是想贡献出一点拙知,希望如果能对有需要的人起到一点帮助的作用,就足够了。
一个搜索引擎能够做到的最基本的事情是接受一个查询输入,然后给出与这个查询输入相关的一些结果。我们常见的搜索引擎百度就是这样一个比较典型的例子。鉴于百度已经占据了国内的绝大部分的搜索份额,于是后来者便另辟蹊径,期望能够在现有的搜索市场中分得一杯羹,创造了垂直搜索的概念。垂直搜索是相对于类似百度或者谷歌这样的通用搜索引擎而提出的。这类搜索引擎往往只针对某一个领域,比如现在国内常见的用来搜索bt和迅雷资源的搜索引擎。不过这类搜索引擎只是限制了通用搜索的查询范围,本质上与那些通用搜索引擎是没有什么差别的,在具体实践上反而要更加简单一些。
我个人喜欢从应用的范围层面来划分,将搜索引擎分为普通互联网搜索引擎和网站站内搜索引擎。互联网搜索引擎需要面对恶劣的数据环境,它从各个不同的网站中搜集网页信息,而这些网站的html代码可能极其不规范,搜索引擎要能够从那些不规范的代码中找出有用的信息。相比互联网搜索引擎,站内搜索引擎要轻松许多,它只处理站内有限的文本信息,而且对于网站建设者而言,可以限制需要被搜索的内容,很多时候,站内搜索引擎根本不需要处理网页代码就能直接获取到信息本身。
在后续一系列围绕如何制作搜索引擎的文章中,我将介绍实现一个通用搜素引擎所需的基础知识,并帮助打造一个简易的互联网搜索引擎和站内搜索引擎。不过在这一切开始之前,读者需懂得基本的编程知识和线性代数知识,否则阎宏飞老师的《搜索引擎》就已经足够了。我会尽量在文章里使用伪代码,尽量少的引用线性代数知识。不过我还是建议读者学习一下c语言和javascript。在具体实践中我们还将涉及nodejs和mongodb,这2个虽然不是编程语言,但是相当有用的中间件工具,有时间的话,也要了解一下。如果你曾学过java,nodejs就相当于weblogic,而mongodb就是oracle数据库了。