[发明专利]全文检索中倒排索引及其追加数据的保存方法及存储装置有效
申请号: | 201210591989.9 | 申请日: | 2012-12-29 |
公开(公告)号: | CN103020299A | 公开(公告)日: | 2013-04-03 |
发明(设计)人: | 张学;范振勇;崔维力;武新;赵伟 | 申请(专利权)人: | 天津南大通用数据技术有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 天津滨海科纬知识产权代理有限公司 12211 | 代理人: | 孙春玲 |
地址: | 300384 天津市滨海新区高新区*** | 国省代码: | 天津;12 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 全文 检索 中倒排 索引 及其 追加 数据 保存 方法 存储 装置 | ||
技术领域
本发明属于数据存储领域,尤其是涉及一种在全文检索中倒排索引及其追加数据的保存方法及存储装置
背景技术
在关系数据库系统里,全文索引是检索文档数据最有效率的方式之一,在当前的网络环境下,信息量和用户量都成爆炸性的增长,全文索引成为信息检索系统的主要手段之一,倒排索引是全文检索系统的核心部分,其存储结构对全文检索系统性能也有很大的影响。
倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。
全文索引倒排文档数据是由Term ID对应的一组文档编号和在文档中的偏移组成,其表现形式为Term ID-->{<doc ID,{offset}},其中Term ID是断词器划分的最小索引单元,在中文全文检索中一般为字、词、英文、数字串和几种形式的组合,具有以下特点:
1.不同Term对应倒排数据长度相差很大,常见的字如“的”、“地”等字符往往出现频率相当的高,也有仅出现一次的特殊字符串。
2.全文索引中词汇量巨大,往往一个全文检索库会拥有千万个词汇,每一个词汇都作为一个检索单元,会占用大量的存储空间
全文索引倒排数据的存储一般有两种:一、采用经验数据把已知词典按词频划分为中、高、低几档的方式,每档词频采用不同的数据块大小存储,存储高频词的每块数据较大,反之最低频率块最小。这种方式的好处是磁盘浪费较少,读取效率有保障,缺点是一旦实际数据与经验数据不符或者出现新的词汇时,词频发生较大变化,则出现高频词空间浪费,低频词词链超长造成读取效率低。二、采用划分大数据单元的方式,如每1GB数据为一个单元,每个单元中所有倒排文档数据按词条编号、文档编号、偏移量(TermID、Doc ID、Offset)排序,在索引完成之前把所有的数据单元进行数据合并为一个最终单元。这种方式的优点是空间浪费为0,缺点是最终的数据排序需要一倍磁盘剩余空间,造成磁盘空间利用率为50%,合并的时间较长。
发明内容
本发明要解决的问题是提供一种在全文检索系统中的高效保存索引的方法,可以充分提高磁盘空间利用率。
为解决上述技术问题,本发明采用的技术方案是:一种在全文检索系统
中的高效保存索引的方法,包括:
1)比较索引单元数据长度和预设的阀值K的大小关系;
2)如果索引单元数据长度小于K,将索引单元数据全部存入B树中;
3)如果索引单元数据长度等于K,将索引单元数据从开始部分至K的部分存入索引单元数据数据块;
4)如果大于K,则比较索引单元数据长度和n*K(n=2,3,……)的大小关系,并按照下列方式进行存储:
1.如果索引单元数据长度大于(n-1)*K且小于n*K,将索引单元数据从开始部分至n*K部分存入索引单元数据块,将剩余部分存入B树中;
2.如果索引单元数据长度等于n*K,将所有索引单元数据按次序存入索引单元数据块。
进一步的,所述的B树可以存储至少两个长度小于K值或者长度大于K值存储在块设备之后的剩余数据的索引单元数据。
进一步的,所述的B树为B+树的一种变形,所述的B+树的一种变形为去掉叶子节点中保存的指向兄弟节点的指针的B+树。
根据本发明的另一方面,本发明还提供了一种高效保存索引方法的存储装置,包括:
存储数据块单元,用来存储固定长度的整数倍的索引单元数据;
B树存储页单元,用来存储索引单元数据不足K的剩余部分。
进一步的,所述的B树为B+树的一种变形,所述的B+树的一种变形为去掉叶子节点中保存的指向兄弟节点的指针的B+树。
根据本发明所提供的一种高效保存索引方法的存储装置的追加全文索引数据的存储方法:
1)计算原B树中的索引单元数据与追加的索引单元数据之和;
2)如果索引单元数据长度之和小于n*K且大于(n+1)*K(n=2,3……),将B树存储的部分取出并将索引单元数据从B树存储的部分至n*K的部分存入索引单元数据数据块,将剩余索引单元数据存入B树中;
3)如果索引单元数据之和等于n*K,将B树存储的部分取出并将索引单元数据从B树存储部分至n*K的部分存入索引单元数据数据块;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天津南大通用数据技术有限公司,未经天津南大通用数据技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210591989.9/2.html,转载请声明来源钻瓜专利网。