2.1 数据搜索方式

在第1章中,我们已经了解到:搜索引擎主要是对数据进行检索。而在研发过程中不难发现,数据有两种类型,即结构化数据和非结构化数据。

对于软件研发人员来说,在做数据持久化时,对数据的结构化感知会特别强烈。如结构化数据一般我们会放入关系数据库(如MySQL、Oracle等),这是因为结构化数据有固定的数据格式和有限个数的字段,因此可以通过二维化的表结构来承载。

而非结构化数据一般会放入MongoDB中,这是因为非结构化的数据长度不定且无固定数据格式,显然在关系数据库中存储这类数据较为困难。

与数据形态相对应的,数据的搜索分为两种,即结构化数据搜索和非结构化数据搜索。

因为结构化数据可以基于关系数据库来存储,而关系数据库往往支持索引,因此结构化数据可以通过关系数据库来完成搜索和查找。常用的方式有顺序扫描、关键词精确匹配、关键词部分匹配等,对于较为复杂的关键词部分匹配,通常需要借助like关键字来实现,如左匹配关键词“TAL”时需要使用like “TAL%”,右匹配关键词“TAL”时需要使用like “%TAL”,完全模糊匹配关键词“TAL”时需要使用like “%TAL%”。

对于非结构化数据,数据的搜索主要有顺序扫描和全文检索两种方法。显然,对于非结构化数据而言,顺序扫描是效率很低的方法,因此全文检索技术应运而生,而全文搜索就是本书所说的搜索引擎要做的事情。

在实现全文检索的过程中,一般都需要提取非结构化数据中的有效信息,重新组织数据的承载结构形式。而搜索数据时,需要基于新结构化的数据展开,从而达到提高搜索速度的目的。显而易见,全文检索是一种空间换时间的做法——前期进行数据索引的创建,需要花费一定的时间和空间,但能显著提高后期搜索的效率。

下面介绍搜索引擎的工作原理。