搜索引擎--文件索引设计
文件索引设计
索引文件采用倒排档结构,建立数据库表(三个索引表)
一级索引表
1、一级索引表按词曲中的首字母分N个扩展表,如A—G为一个表;H—N为一个表;O—W为一个表。
2、一级索引文件属于记录式文件,每一记录大小固定
共有四个数据项构成,WordID、文档数、第一个文档开始位置(存放在哪个二级索引表)、第一个文档开始位置(存放在二级索引表哪个ID)
WordID是词典中词条的ID,文档数是指这个词总共在多少个文档中出现,文档开始位置是一个文件指针指向二级索引中出现当前词的文档集中的第一个文档存储位置,这个指针是由二级索引表的表名(定长字符串)和第几条记录组成(数字形值)。通过这个指向可以直接定位到二级索引表读取位置,然后读取nDocs个记录即可,因为它们是存放在连续的地址空间上(通过链表形式)。
WordID |
文档数 |
FirstTable |
FirstID |
WordID |
nDocs |
放在哪个二级索引表 |
二级索引表哪个ID |
WordID |
nDocs |
放在哪个二级索引表 |
二级索引表哪个ID |
WordID |
nDocs |
放在哪个二级索引表 |
二级索引表哪个ID |
…………………………………………………………..
二级索引表
1、 二级索引表根据数据量自动扩展N个二级索引表
2、 二级索引也是一种记录式文件,每一记录有三个数据项组成,DocID、出现次数、第一个Hit位置。其中DocID是文档的ID,出现次数指的是当前文档中某一个词出现的次数,第一个Hit位置也是一个指针,指向Hits表中的某一位置。通过这个指针就可以直接定位到Hits位置中的读取位置,这样连续读取nHits个记录就可以将所有当前词在当前文档中的出现的位置信息都读入。通过下一文档的指针找到下一个出现当前词的文档,形成一个链表。该链表的最后一个指针指回第一个指针,形成封闭的链表
ID主键 |
文档的ID |
首次出现位置(表) |
首次出现位置 |
下一文档的指针(表) |
下一文档的指针(位置) |
ID |
DocID |
Hits表 |
Hits位置 |
哪个二级索引表 |
二级索引表哪个ID |
ID |
DocID |
Hits表 |
Hits位置 |
哪个二级索引表 |
二级索引表哪个ID |
ID |
DocID |
Hits表 |
Hits位置 |
哪个二级索引表 |
二级索引表哪个ID |
…………………………………………………………..
Hits位置表
1、Hits位置表根据数据量自动扩展N个Hits位置表
2、Hits位置信息文件:些文件每一记录只有一个数据项,即Hit位置信息,只记录了各词在文档中出现的位置。将同一词在同一文档中的出现位置按出现的先后排列。这样在读取文档并提取摘要时只需对字符串从头到尾扫描一边即可,不需要来回扫描。
ID主键 |
出现次数 |
出现位置 |
ID |
出现次数 |
1,4,6,10……….. |
ID |
出现次数 |
43,46,66,100……….. |
ID |
出现次数 |
8,50,89,213……….. |
好处:
1)、将倒排档索引文件组织成数据库系统,由数据库系统来管理会大提高系统的效率并在数据维护方面有一定的优越性。
2)、每处理完一文档无须导出顺排数据
3)、在一级索引表中对关键字分块,按wordID顺序排序、有利于搜索性能
4)、数据更新方便,删除,增加数据只需更改指针指向。
存在问题:
1)、搜索二级索引表将出现循环搜索
还有存在什么问题,大家说出来。还有我真正应该怎么去想这样的问题!