搜索引擎原理 – 正排索引、倒排索引以及齐普夫法则

来源:互联网 发布:软件beta版已过期 编辑:程序博客网 时间:2024/05/28 09:31

http://www.tinysz.com/36.html

我们在提交一个关键字时,搜索引擎是如何快速定位到包含有此关键字的相关页面的?这就是索引系统的功劳,索引系统负责为关键字和网页建立对应关系,使得在海量网页中迅速查找成为可能。

索引

首先我们先介绍下索引(Index)。索引本质上是一种记录信息的信息,它本身占较小的体积,但记录了关键字在整个系统中出现的位置。日常生活中,我们也有很多使用索引的例子,比如一本图书,它的目录就是一个索引文件,每条索引记录了章节所在页码,能使读者快速翻阅至所需章节。网页被抓取并经过分析系统分析后,索引系统便会给网页一个唯一的ID,并将网页ID和位置记录在索引文件中。

需要注意的是,由于网页是海量的,为了存储和计算考虑,网页ID会尽可能的短,并且最好是长整数而不是字符串。因为字符串在排序、查找时的性能远远不如整数,并且字符串字节数多,造成存储和内存压力加大。通常情况下会把URL映射成64位或128位的二进制数。

 

正排索引

正排索引是从网页到关键字的映射,一般含有网页ID、关键字(或关键字ID)、关键字出现次数、关键字出现位置等几个重要参数。例如给定两篇文档“中国人民爱中国”和“中国历史悠久”,经分词后创建的一个典型的正排索引如下所示:

正排索引

其中,Hits代表了关键字在文档中出现次数,List代表了关键字出现在文档中的位置。

因此正排索引是通过网页来寻找关键字,可以知道一个网页中是否包含了某个关键字、关键字出现了几次以及关键字出现的位置。但是网页检索是通过关键字来找文档,因此需要把正排索引转换为倒排索引,才能满足实际的需求。

 

倒排索引

倒排索引是从关键字到文档的映射,可以分为两个部分。

第一部分为索引文件,记录了关键字(或关键字ID)、出现在多少文档中以及这些文档在文档库中的偏移量。

第二部分为文档文件,记录了文档ID、关键字出现次数以及关键字在文档中出现的位置。

倒排索引

例如:词“中国”在两篇文档中均出现,则nDocs=2,Offset分别为两篇文档的偏移地址。根据两个地址分别找到DocID为000001和000002的文档。“中国”在第一篇文档中出现了2次,偏移量分别为0,3,在第二篇文档中出现了1次,偏移量为0。

这样输入任意一个关键字,通过搜索索引文件,就能找到对应的文档地址,再根据文档地址在文档文件中查找,就能找到相关文档并能显示关键字在各文档中的位置。

 

齐普夫法则

在一个数据集(一本书、一个网页集合等)中,排名第k的词,与其在数据集中出现的次数Nk的乘积是一个常数C,即k*Nk=C,而C约等于数据集的总词数。

又由于所有词频率出现之和为1,因此容易通过数学推导出:一个排名为k的词,它的实际词频是1/(lnC’*k),C’为数据集总词汇数(C是总词数)。

由于各词的词频不同,因此在做索引时,可以根据词频对关键字ID进行哈夫曼编码。对词频较高的词,使用短编码,词频较低的词,使用长编码,这样可以保证存储空间和查询速度的全局最优。

1 0
原创粉丝点击