索引基础
- 单词—文档矩阵
单词文档矩阵是表达两者之间包含关系的概念模型;
搜索引擎的索引其实就是实现单词-文档矩阵的具体数据结构,实现方式有:倒排索引、签名文件、后缀树等;
倒排索引
单词ID | 单词 | 文档频率 | 倒排列表(DocID;TF;<POS>) |
---|---|---|---|
1 | 谷歌 | 3 | (1;1;<1>),(2;1;<1>),(3;2;<1,6>) |
2 | 地图 | 2 | (1;1;<3>),(2;1;<3>) |
以单词地图为例,单词编号即为2,文档频率为2,证明整个文档集合中有2个文档包含这个单词,对应的倒排列表为{(1;1;<3>),(2;1;<3>)},其含义为在文档1和文档2 中出现过这个单词,单词的频率都为1,单词“地图”在文档中出现的位置都是3,即文档中第3个单词是“地图”。
在实际的搜索引擎系统中,并不存储倒排索引项中的实际文档编号,取而代之的是文档编号差值(D-Gap)。eg:原始的3个文档的编号分别是187、196、199,在实际存储时就转化为187、9、3。
进行差值编号的原因是为了更好的对数据进行压缩;
单词词典
单词词典是倒排索引中非常重要的组成部分,它用来维护文档集合中出现过的所有单词的相关信息。
高效的数据结构对于搜索效率的影响很大,常用的数据结构包括哈希加链表结构和树形词典结构;
- 哈希算法
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。
哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时 ,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。
- 树形结构:B树(或B+树)与哈希方式查找不同,需要字典能够按照大小排序(数字或字符序),而哈希方式无需提前排序;