invertedindex-倒排文件.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
invertedindex-倒排文件.doc

倒排文件实验 试验目的:熟悉倒排表原理与应用特点,用C++实现一个倒排表模型系统。 一、基本原理 一般的文件组织中,是先找记录,再找该记录所含的关键字;而倒排文件中,是先给定次关键字,然后查找含有该次关键字的各个记录,这种文件查找次序正好与一般文件的查找次序相反,因此称为倒排。 倒排文件中的次关键字索引称倒排表。倒排表和主文件一起就构成了倒排文件。 某次活动的学生报名登记表文件,部分信息如下: SNO name sex age dept 001 张三 男 18 元培 002 李四 女 17 哲学 003 王五 男 19 生物 004 赵六 女 18 元培 设计倒排表如下: 001 003 17 002 元培 001 004 女 002 004 18 001 004 哲学 002 … … 19 003 生物 003 … … … … … … 性别倒排表 年龄倒排表 学院倒排表 根据主文件建立三个倒排表 如找院系为“元培”的所有学生(简单查询),可以在院系倒排表中,取出属性值为“元培”的那一行,所记录。又如年龄在18到20之间的所有学生(范围查询),我们可以把年龄倒排表中18,19和20这三行所对应的三个编号集合做并运算,最后结果就是我们要找的。而找出年龄在19岁以上的所有男生(逻辑查询),这个我们找出19岁以上的所有编号集合,用并运算合在一起,再同性别倒排表中的男生那一行的集合做与运算,最后就能得到正确结果。B+-tree形式。 二、设计与实现 根据主文件内容的更新,倒排表本身也是需要进行插、删、改维护,在数据规模较大时(例如搜索引擎中),也需要对倒排表本身进行组织(建立索引)。此处我们先讨论怎么建立倒排表,然后讨论怎么对倒排表进行有效组织或是建立索引。 倒排表的建立 若主文件不存在,首次向主文件中插入记录时,应创建倒排表文件;也可以针对已有主文件建立倒排表。 关于倒排表文件的划分,可以把各次关键字确立的倒排表存放于同一个文件中,也可以对每个次关键字单独建一个倒排表文件。 例如按照上面示例,主文件中的每条记录对应一个学生的相关信息,主文件记录结构如下 采用定长记录 struct record { union { unsigned long nextfreeitem;//若该项对应记录被删除,则插入空闲链表头,把下一个空闲项地址记录下 } unsigned long sno; char name[12]; bool sex; unsigned int age; char dept[8]; } 结构名 描述 大小 头部 空闲项指针 指向最新空闲单元 第一次删除操作之前保留不用 4B 数据区 记录项 记录/下一块空闲单元 sizeof(record) 此处为29B …. 【说明】空闲项指针主要目的一是降低文件重组织代价,每次删除,我们可将已删除项加入空闲列表,插入记录项时可以对这些空闲区加以利用,若插入主文件过程中发现已无空闲记录项可插入,则在文件尾部新开辟空闲区。 假定选定“学院”作为次关键字,在建立主文件过程中,可以同时建立索引表。 内存组织结构 针对“学院”属性列中出现的所有属性值,建立头节点数组,采用链表形式,每次扫描一个记录,按其出现顺序依次从头部插入链表。 template struct headnode typename AtrriType//头结点 { AtrriType attribute; struct keynode * next; } head; vectorstruct headnode index; //头结点数组 template struct keynode typename KeyType //关键字结点 { KeyType key; struct keynode * next; }; …… 磁盘组织形式 如果需要把倒排表文件写入磁盘,则按照头结点数组顺序扫描写入磁盘(这里先用最简单的顺序文件,后面讲介绍利用B+-tree的结构进行更有效的组织),文件结构如下 元培 004 元培 001 哲学 002 生物 003 …… 查找 在倒排表中根据关键字,采用顺序遍历,找到所有包含该关键字的元组号,存储到set容器,利用集合的并交可进行多条件查询。 删除 假设先将004号记录删除,再删除002,那么 偏移 记录号 记录 0 最近删除 +4 001 (……) +29

文档评论(0)

000 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档