首页 > 代码库 > 第八章:简单之美——布尔代数和搜索引擎的索引
第八章:简单之美——布尔代数和搜索引擎的索引
接下来的几章,我们将讨论搜索引擎的一些基础知识。要真正做好搜索引擎,不可能是一朝一夕的事情,没有捷径可走。做好搜索,最基本的要求是每天分析10-20个不好的搜索结果,累积一段时间才有感觉。但是往往很多工程师都做不到这一点。搜索殷勤的原理其实非常简单:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。下面我们将一一介绍。
1.布尔代数
布尔值的运算相当简单,应该是属于高中的知识了,这里就不再讲述了。我们主要来看下文献检索和布尔运算的关系。对于用户输入的关键词来说,搜索引擎要判断每篇文章是否有这个关键词,如果有,就相应地给这篇文献一个逻辑值——真(True或1)或者假(False或0)。比如我们要找计算机应用的文献,但不想找软件方面的东西。可以用这样的一个语句“计算机 AND应用 AND(NOT 软件)”来表示。
2.索引
大部分使用搜索引擎的人都惊讶于它能在极短的时间内找到千万条搜索结果。显然,如果把所有网页文本都扫描一遍是不可能的,那么这里面一定使用了技巧,这个技巧就是构建索引。最简单的索引的结构是用一个很长的二进制数表示一个关键词是否出现在文章中。有多少文章,就有多少位,一位对应一篇文章。比如“计算机”对应的二进制数为01001000110...,表示第二,第五,第九,第十...文献包含了这个关键字。同样的,假定“应用”对应的二进制数是:00101001100....,那么查找“计算机应用”的文献时,只要把这两个二进制数进行布尔运算AND,结果为1对应的那篇文献就是满足要求的。
由于互联网的网页数量是巨大的,网络中的词也非常多。因此,这个索引是巨大的。所以普遍的做法是根据网页的序号将索引分成很多份,分别存储在不同服务器中。每当节诶受一个查询时,这个查询就被分到许多服务器中,这些服务器并行处理用户请求,并把结果返回给主服务器合并处理,最后把结果返回给用户。
而随着互联网上内容的增加,数据也越来越多,因此需要根据网页的重要性,质量和访问的频率建立常用和非常用等不同等级的索引。这就类似计算机中的页表和快表的差别。但是不论搜索引擎的索引在工程上如何复杂,原理上依然非常简单,即等价于布尔运算。
第八章:简单之美——布尔代数和搜索引擎的索引