一. 正向索引
常规的索引建立方式
文档---> 关键词的映射过程(正向索引)
比如: 我有很多个文章,如果想查询其中几个文章是否含有刘耀这个关键词,那么我就需要打开所以文章,找到里面含义刘耀的文章.这就是正向索引
在搜索引擎中每个文件都对应一个文件ID,文件内容被表示为一系列关键词的集合(实际上在搜索引擎索引库中,关键词也已经转换为关键词ID)。例如“文档1”经过分词,提取了20个关键词,每个关键词都会记录它在文档中的出现次数和出现位置。(来自百度)
得到正向索引的结构如下:
“文档1”的ID > 单词1:出现次数,出现位置列表;单词2:出现次数,出现位置列表;…………。
二、倒排索引
倒排方向建立索引
关键词---> 文档的映射
把正向索引的结果重新构造成倒排索引(反向索引)
如图:
图1:
WordID | 单词 | 倒排文档列表(DocId) |
---|---|---|
1 | 刘耀 | (1,❤️,11>),(2,<7>),(3,<9>) |
2 | Python | (1,<6>), (2,<1>), (3,<3>), (4,<9>) |
3 | Java | (3,<2>), (5, <6>) |
4 | go | (3, <1,12>), (3,❤️,4>) |
5 | js | (1, <1,16>), (5, <1>) |
图2:
WordID | 单词 | 倒排文档列表(DocId),TF |
---|---|---|
1 | 刘耀 | (1,❤️,11>,2),(2,<7>),(3,<9>,2) |
2 | Python | (1,<6>,10), (2,<1>,2), (3,<3>,22), (4,<9>,12) |
3 | Java | (3,<2>,12), (5, <6>,2) |
4 | go | (3, <1,12>,2), (3,❤️,4>,2) |
5 | js | (1, <1, 16>,2), (5, <1>,2) |
把文档和单词进行组合运算
TF代表频率的意思
把每个出现关键词的文档都记录该文档的ID,<>括号里面的是这个关键词出现的位置,最后一位数字是出现的频率。
当我根据关键词查找 例如查找刘耀,就可以直接搜到对应文档的ID