一种全文检索的高效保存倒排索引方法与流程

文档序号:22129668发布日期:2020-09-08 12:41阅读:265来源:国知局
本发明涉及数据存储领域,具体提供一种全文检索的高效保存倒排索引方法。
背景技术
::newsql技术近几年发展十分迅猛,国内外都有了较成熟的系统。在业界一些开源系统的实现中,rocksdb起到了核心的存储和查询功能。rocksdb是一个kv形式的存储引擎,就像一个有序的大map,map的key,value都是字节数组,其排序顺序就由key这个二进制字节数组决定。rocksdb除了提供随机读写kv的接口,还提供了创建一个迭代器,从大于等于某个key开始的位置向下扫描数据的接口。全文索引是检索文档内容数据最有效率的方式之一,在当前的网络环境下,信息量和用户量都成爆炸性的增长,全文索引成为信息检索系统的主要手段之一,倒排索引是全文检索系统的核心部分,其存储结构对全文检索系统性能也有很大的影响。倒排索引(英语:invertedindex),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。全文索引倒排数据的存储一般常用的有两种:第一种、采用经验把已知词典按词频划分为中、高、低几档的方式,每档词频采用不同的数据块大小存储,存储高频词的每块数据较大,反之,最低频率块最小。第二种、采用划分大数据单元的方式,如每igb数据为一个单元,每个单元中所有倒排文档数据按词条编号、文档编号、偏移量(termid、docid、offset)排序,在检索之前把所有的数据单元进行数据合并为一个最终单元。综上两种,都存在内容模糊导致匹配检索效率低的问题,如何提高匹配检索效率,是本领域技术人员亟待解决的问题。技术实现要素:本发明是针对上述现有技术的不足,提供一种实用性强的全文检索的高效保存倒排索引方法。本发明解决其技术问题所采用的技术方案是:一种全文检索的高效保存倒排索引方法,运用kv存储系统进行倒排索引数据存储和使用,首先,生成全文倒排索引数据,产生若干term和对应的文档号以及位置信息;然后,先进行term对应文档号的编码,生成term->docid的kv项,按照
发明内容编码key和value值,将生成的docid信息存储到rocksdb的kv系统中;再进行term位置的编码,按照docid->pos的组织方式进行编码,将生成的pos信息存储到rocksdb的kv存储系统中;最后,查询想要得到的分词在数据库的位置,使用上述过程作为key做范围扫描,得到想要分词的所有信息。进一步的,term->docid主要存储了倒排索引的词条到对应的文档号,term->docid的组织方式由两部分组成,一部分为key,另一部分为value。进一步的,在term->docid的组织方式下,key部分包括tableid、colid、idxid、termid和timespan;所述tableid表示表的id号,colid表示创建全文索引的列id号,idxid表示当前全文索引的id号,termid表示全文分词后产生的词条编码,timespan表示本次写入的时间戳。进一步的,value部分为本次全文分词处理的文档号。进一步的,docid->pos的组织方式也是由key部分和value部分组成,此时,key部分包括tableid、colid、idxid、pos和docid;所述tableid表示表的id号,colid表示创建全文索引的列的id号,idxid表示当前全文索引的id号,pos表示文档位置信息的固定标记,docid文档编号即索引所在列的行号。进一步的,docid->pos的组织方式的value部分,记录了该文档所有term的位置信息,每个term的位置信息由termid、length和pos组成;其中,termid表示词条编号,length表示该词条在当前文档所有位置信息序列的字节长度,pos表示位置值。进一步的,在删除rocksdb中对应的某个docid后,对于docid的位置信息,直接标记删除,在rocksdb在进行数据合并整理时,可以将对应的docid->pos信息删除。进一步的,对于term->docid记录,由于value是多个docid的集合,无法直接删除,因此要增加一条索引的doc删除kv记录;docid->delete的组织方式也是由key和value组成,key由tableid、colid、idxid、rm和timespan组成,tableid表示表的id号,colid表示创建全文索引的列的id号,idxid表示当前全文索引的id号,rm表示该索引删除文档标记,timespan表示本次写入的时间戳;value为本次全文分词处理的文档号。进一步的,term->docid的kv存储是按照批次存储,这时需要启动rocksd的整理合并服务,对服务的实际执行方式做改动,term->docid的key中时含有时间戳的但去除时间戳后前缀一致,根据这条规则,可以将term->docid的多个kv项进行合并并给予新的时间戳,减少了同一个term对应的kv项。进一步的,合并过程中需要提取docid->delete信息,同时去除删除的docid。本发明的一种全文检索的高效保存倒排索引方法和现有技术相比,具有以下突出的有益效果:本发明在kv存储系统下,倒排索引数据的kv组织方式,kv格式的倒排数据的追加存储,删除存储和读取存储。对相同单词的合并归类,对命中文档的位置信息提取,通过对倒排索引的支持,提高kv存储方式下的模糊数据检索性能,提高rocksdb在内容模糊匹配检索中的效率。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图1是一种全文检索的高效保存倒排索引方法中term->docid的组织方式图;附图2是一种全文检索的高效保存倒排索引方法中docid->pos的组织方式图;附图3是一种全文检索的高效保存倒排索引方法中docid->delete的组织方式图;附图4是本实施例中生成全文倒排索引数据库的举例图。具体实施方式为了使本
技术领域
:的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。下面给出一个最佳实施例:现有技术下采用经验数据把已知词典按词频划分为中、高、低几档的方式,每档词频采用不同的数据块大小存储,存储高频词的每块数据较大,反之最低频率块最小。这种方式的好处是磁盘浪费较少,读取效率有保障,缺点是一旦实际数据与经验数据不符或者出现新的词汇时,词频发生较大变化,则出现高频词空间浪费,低频词词链超长造成读取效率低。另一种方式是采用划分大数据单元的方式,如每igb数据为一个单元,每个单元中所有倒排文档数据按词条编号、文档编号、偏移量(termid、docid、offset)排序,在索引完成之前把所有的数据单元进行数据合并为一个最终单元。这种方式的优点是空间浪费为0,缺点是最终的数据排序需要一倍磁盘剩余空间,造成磁盘空间利用率为50%,合并的时间较长。本实施例中的全文检索的高效保存倒排索引方法提供了一种新的倒排索引方法,在kv存储系统下,倒排索引数据的kv组织方式,kv格式的倒排数据的追加存储,删除存储和读取存储。对相同单词的合并归类,对命中文档的位置信息提取,通过对倒排索引的支持,提高kv存储方式下的模糊数据检索性能。如图1所示,term->docid主要存储了倒排索引的词条到对应的文档号(数据库的行号)。term->docid的组织方式由两部分组成,一部分为key,另一部分为value。key的主要组成部分tableid表示表的id号,colid表示创建全文索引的列的id号,idxid表示当前全文索引的id号,termid表示全文分词后,产生的词条编号,timespan表示本次写入的时间戳,该时间戳保证同一个term的多个kv项不会互相覆盖。value部分为本次全文分词处理的文档号。实际存储采用差量压缩存储。这种存储方式的好处是多次全文分词结果产生的同一term的文档倒排列表写入会由于时间戳的差异不会产生覆盖。同时在检索是,由于rockdb支持范围检索,进行范围查找时,可以取得所有批次的该term的对应的文档号。倒排索引中的位置信息是在文档命名后才开始使用的,因此,我们在进行pos存储时,按照docid作为pos查询的key关键信息。如图2所示,docid->pos的组织方式也是由key部分和value部分组成,此时,key部分包括tableid、colid、idxid、pos和docid;tableid表示表的id号,colid表示创建全文索引的列的id号,idxid表示当前全文索引的id号,pos表示文档位置信息的固定标记,docid文档编号即索引所在列的行号。docid->pos的组织方式的value部分,记录了该文档所有term的位置信息,每个term的位置信息由termid、length和pos组成;其中,termid表示词条编号,length表示该词条在当前文档所有位置信息序列的字节长度,pos表示位置值,可以在查找对应term的位置信息时跳跃查找,加快查找的效率。删除场景支持,在删除rocksdb中对应的某个docid后,对于docid的位置信息,可以直接标记删除,在rocksdb在进行数据合并整理时,可以将对应的docid->pos信息删除。对于term->docid记录,由于value是多个docid的集合,无法直接删除,因此要增加一条索引的doc删除kv记录。如图3所示,docid->delete的组织方式也是由key和value组成,key由tableid、colid、idxid、rm和timespan组成,tableid表示表的id号,colid表示创建全文索引的列的id号,idxid表示当前全文索引的id号,rm表示该索引删除文档标记,timespan表示本次写入的时间戳。value部分为本次全文分词处理的文档号。实际存储采用差量压缩存储。数据整理,当倒排数据增多时,由于term->docid的kv存储是按照批次存储,不可避免同一个term对应的kv项增多,这时需要启动rocksd的整理合并服务,对服务的实际执行方式做改动,由于term->docid的key中时含有时间戳的但去除时间戳后前缀一致,根据这条规则,可以将term->docid的多个kv项进行合并并给予新的时间戳,减少了同一个term对应的kv项,可以提高检索效率。合并过程中需要提取docid->delete信息,同时去除删除的docid。例如:表t1的id号为10,创建全文索引的列id为8,全文索引的id为3。这里生成的全文倒排索引数据,如图4所示。产生了10个term,term的编号1-10,因此生成的term->docid的kv项如下:对应的docid->pos的kv项如下;如上编码就可以将此次分词得全文倒排索引存储到rocksdb得kv存储系统中。检索“跳槽”时,“跳槽”对应得termid为4,可以使用/10/8/3/4作为key做范围扫描,可以得到倒排文档数据14如果要查询“跳槽”在文档4的位置,可以先用/10/8/3/pos/4作为key做范围扫描,可以得到4文档的所有位置信息,111212313414通过查询“跳槽”的termid为4,即在第4个文档,跳转到数据414得到1个结果4,即表示第4个文档有一个“跳槽”,“跳槽”在文档第4行。上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的全文检索的高效保存倒排索引方法权利要求书的且任何所述
技术领域
:普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1