一种索引结构和索引方法

文档序号:6520012阅读:197来源:国知局
一种索引结构和索引方法【专利摘要】本发明提供一种索引结构和索引方法,其中的倒排索引结构包括:词表索引文件、词位置索引文件、至少一个词倒排项文件和管理文件;词表索引文件中存储有词与ID的对应关系信息;词位置索引文件中存储有与ID对应的词的倒排项在词倒排项文件中的存储位置信息;该存储位置信息包括块链的第一个结点和最后一个结点的位置信息;每个词倒排项文件均包括相同大小的块,一个块仅存储一个词的倒排项,同一个词的倒排项对应的块形成块链结构,块链结构的第一个结点用于检索,块链结构的最后一个结点用于追加词的倒排项;管理文件中存储有用于管理词倒排项文件的管理信息。本发明可以提高检索速度,并满足用户的检索需求。【专利说明】一种索引结构和索引方法【
技术领域
】[0001]本发明涉及索引结构,特别是涉及一种索引结构和索引方法。【
背景技术
】[0002]数据处理设备(如计算机或者服务器等)中存储的数据大致上可以分为结构化数据和非结构化数据,其中的结构化数据如数据库等,而非结构化数据如邮件和word文档等。针对结构化数据,目前通常采用遍历方式进行检索;而针对非结构化数据,通常采用线性扫描方式进行检索。[0003]无论是针对结构化数据而言,还是针对非结构化数据而言,如何从大规模的数据集合中迅速地找出能够符合用户需求的资料,是非常重要的。[0004]结构化数据由于其具有一定的结构,因此,通过采取一定的搜索算法可以加快检索速度;然而,非结构化数据由于其没有一定的结构,且线性扫描的速率较慢,因此,检索速度较慢。[0005]在实际应用中,无论是针对结构化数据的检索,还是针对非结构化数据的检索,在很多情况下都很难满足用户的检索需求,例如:[0006]1、不能够实现大规模数据下的快速查找;如假设一个80G的硬盘,如果想在该硬盘上找到内容包含“语音合成”的文件,通常要花几个小时的时间。[0007]2、不能实现灵活的检索方式;如不能进行“语音”NEAR“合成”之类的查询,上述NEAR操作符的定义可以为“10个词之内”等。[0008]3、不能实现结果排序输出;如用户希望在众多满足条件的查询结果中找到最佳答案,这是无法实现的。[0009]有鉴于现有的检索存在的问题,本发明人积极加以研究创新,以期创设一种新的基于block分配机制的倒排索引结构和索引方法,能够克服现有的检索存在的问题,使其更具有实用性。经过不断的研究设计,并经过反复试作样品及改进,终于创设出确具实用价值的本发明。【
发明内容】[0010]本发明的主要目的在于,克服现有的检索存在的问题,而提供一种索引结构和索引方法,所要解决的问题是,提高检索速度,满足用户的检索需求。[0011]本发明的目的以及解决其技术问题可以采用以下的技术方案来实现。[0012]一种索引结构,包括:词表索引文件、词位置索引文件、至少一个词倒排项文件以及管理文件;[0013]所述词表索引文件中存储有词与其ID的对应关系信息,且所述词表索引文件用于获取待检索词的ID;[0014]所述词位置索引文件中存储有与所述ID对应的词的倒排项在词倒排项文件中的存储位置信息,且所述词位置索引文件用于根据所述待检索词的ID获取对应的存储位置信息;所述存储位置信息包括块链的第一个结点和最后一个结点的位置信息;[0015]每个所述词倒排项文件均包括相同大小的块,所述块中存储有倒排项,且一个块仅存储一个词的倒排项,同一个词的倒排项对应的块形成块链结构,所述块链结构的第一个结点用于检索,所述块链结构的最后一个结点用于追加词的倒排项;[0016]所述管理文件中存储有用于管理所述词倒排项文件的管理信息。[0017]一种索引方法,该方法包括:[0018]从词表索引文件中获取待检索词的ID;[0019]根据所述待检索词的ID从词位置索引文件中获取所述待检索词的倒排项在词倒排项文件中的存储位置信息;[0020]根据所述存储位置信息所述待检索词对应的词倒排项文件中获取块链的第一个结点的位置信息;[0021]根据所述第一个结点的位置信息从相应的词倒排项文件中获取块链的第一个结点,从而获取所述待检索词的所有倒排项。[0022]借由上述技术方案,本发明的索引结构和索引方法至少具有下列优点以及有益效果:[0023]1、本发明中的词的倒排项通过采用块链的形式存储,且存储块链中的第一个结点的位置信息以及最后一个结点的位置信息,从而在检索时可以很方便的读取出倒排项,在建索时可以很方便的追加倒排项;[0024]2、本发明中的词倒排项文件通过采用固定大小的block,使得block的定位速度非常迅速,随机访问非常方便,且不管是读取倒排项还是写入倒排项都可以实现迅速定位。[0025]3、本发明中的一个block是仅属于一个词的,某个block中可以存储不同的倒排项,但是,这不同的倒排项肯定都是属于同一个词的,块链与块链之间可以以词的id进行区分;且1310(^中可以为某个词预留出一部分倒排项的存储空间,方便了检索操作以及后续的建索操作。[0026]4、本发明中的block通过采用链式结构,且每个block存储着块链中下一个block的位置信息,这样,可以将下一个block任意保存在某个词倒排项文件中的某个位置中,方便了倒排项的动态追加。[0027]由上述描述可知,本发明提高了检索速度,并满足了用户的检索需求。[0028]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合说明书附图,详细说明如下。【专利附图】【附图说明】[0029]图1为本发明的基于block分配机制的索引结构的示意图;[0030]图2为本发明的词表索引文件的结构示意图;[0031]图3为本发明的词位置索引文件的结构示意图;[0032]图4为本发明的词倒排项文件的结构示意图;[0033]图5为本发明的由多个词倒排项文件形成的块链示意图;[0034]图6为本发明的管理文件的结构示意图;[0035]图7为本发明索引方法的流程图。【具体实施方式】[0036]为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的基于block分配机制的倒排索引结构和索引方法的【具体实施方式】、结构、特征及其功效,详细说明如后。[0037]发明人在实现本发明过程中发现,对于非结构化数据而言,如果能够将非结构化数据中的一部分信息提取出来,并对其进行重新组织,使其变得有一定的结构,这样,在对该有一定结构的数据进行搜索时,就可以达到搜索速度较快的目的。上述从非结构化数据中提取并重新组织而成的信息,可以称之为索引。[0038]本发明主要包括两部分内容:即先建立索引,然后基于建立的索引进行搜索。建立索引是指从外部输入的各种数据中提取信息,并重新组织,写入相应的文件,以形成索引;搜索是指将用户的搜索需求转换为查询请求,并在已创建的索引中进行查找,以得到检索结果。[0039]下面结合附图1-6对本发明的索引结构和索引方法一并进行说明。[0040]本发明的索引结构的一个具体例子如图1所示。图1中示出的索引结构主要包括:词表索引文件(即图1中示出的word_table.1dx)、词位置索引文件(即图1中示出的word,idx)、至少一个词倒排项文件(即图1中示出的000000.dat、000001.dat以及000002.dat这三个文件)以及管理文件(图1中未示出)。[0041]1、词表索引文件(也可以称为词典),如在实际应用中可以使用文件名为word_table,idx的文件作为词表索引文件,且该文件通常为全局文件。[0042]该词典中存储有词与其id的映射表,即每个词都会被分配一个标识(id),且id是词在词典中的唯一标识。该id可以为整型类型,且可以是累加的。词典的一个具体结构如图2所示。其中,全局文件I(词表索引文件)中存储有词与其id的映射表。[0043]针对汉语语言的特点,人们日常使用的词汇数量通常在三万左右,这使得该词表索引文件所占用的存储空间不会太大,因此,该词表索引文件可以常驻内存。本发明将字符串形式的词映射为整型的id主要是为了减小存储空间并加快查找速度。[0044]在本发明的索引结构中,只有在词表索引文件中涉及到字符形式的词,其他涉及到词的地方都是使用与该词对应的在索引id。[0045]另外,可以在词表索引文件中为每个词都对应设置一标志位,该标志位可以加快检索进程。该标志位有三种有效的取值(如O、I和2),该三种有效的取值可以分别表示出该词根本没有经过预搜索、该词已经经过了预搜索但是没有搜索结果、或者该词经过了预搜索而且有搜索结果。词表索引文件中的所有标志位可以以map的形式设置。[0046]上述“该词根本没有经过预搜索”可以理解为:没有与该词对应的倒排信息,如在词位置索引文件中没有与该词的id对应的位置信息。[0047]上述“该词已经经过了预搜索但是没有搜索结果”可以理解为:存在与该词对应的倒排信息但是倒排项为空,如在词位置索引文件中有与该词的id对应的位置信息,但是词倒排项文件中与该位置信息对应的词的所有倒排项均为空。[0048]上述“该词经过了预搜索而且有搜索结果”可以理解为:存在与该词对应的倒排信息且倒排项不为空,如在词位置索引文件中有与该词的id对应的位置信息,且词倒排项文件中与该位置信息对应的词的倒排项不为空。[0049]在检索的过程中,可以根据上述标志位的三种取值提前获知待检索词是否有检索结果;例如,检索“你好”,可以从内存的map中获得该词对应的标志位的取值,如果该标志位的取值为O或者1,则表示“你好”这个词没有检索结果,本次检索过程结束;如果该标志位的取值为2,则表示“你好”这个词有检索结果,需要进行后续的检索操作,以提取该词的倒排项。[0050]2、词位置索引文件(也可以称为词位置),如在实际应用中可以使用文件名为word,idx的文件作为词位置索引文件,且该文件通常为全局文件。词位置索引文件的一个具体结构如图3所示。其中全局文件2(词位置索引文件)存储有词的倒排项在全局dat文件(词倒排项文件)的位置信息。[0051]在每一个词所拥有的倒排项在词倒排项文件中以块(block)链的形式存储的情况下,词位置索引文件中存储的位置信息通常包括块链的第一个block的位置信息以及最后一个block的位置信息;且第一个block的位置信息主要用于检索,以依次得到待检索词的整个block链;而最后一个block的位置信息主要用于继续建索,以便于可以快捷且动态的为词追加倒排项。[0052]3、词倒排项文件(也可以称为词倒排表),如在实际应用中可以使用文件名为xxxxxx.dat(其中的“xxxxxx”可以为顺序号)的文件作为词倒排项文件,且该文件通常为全局文件。词倒排项文件的一个具体结构如图4所示。词倒排项文件中存储有词的倒排项。每个词倒排项文件的文件大小的最大值是固定且相同的,在词倒排项文件的文件大小达到最大值且仍然需要存储更多的倒排项时,会建立新的词倒排项文件,且新建立的词倒排项文件的文件名可以以数字累加的方式来命名。[0053]每一个词倒排项文件都可以包含有若干个block,且文件大小达到最大值的词倒排项文件最多所能包含的block数量应该是固定并相同的。[0054]—个词倒排项文件所包含的每个block的大小固定并相同,从而每个block所能够存储的倒排项的最大数量也是固定的。词倒排项文件的大小每次以一个block的大小为单位增加,即未达到最大值的词倒排项文件每次增加文件大小时,均增加一个固定值。[0055]一个词所拥有的所有倒排项在词倒排项文件中可以以块(block)链的形式存在,且块链中的每一个block都会指示其后的下一个block的位置,如图5所示。块链中的每一个block都可以称为一个结点,如块链中的第一个block为块链的第一个结点,块链中的最后一个block为块链的最后一个结点。需要说明的是,一个块链可以只包括一个block,此时,该block既是该块链的第一个结点,也是该块链的最后一个结点。[0056]本发明中的每个block的结构都是相同的,即,首先是一个block头,接着是固定数目(如1024个)的用于存储倒排项的item。block头中记录着当前block已经存储了多少个倒排项,这样,如果在当前block中追加倒排项的话,可以很方便的确定出应该从当前block中的哪个位置(item)继续写倒排项。没有被填写倒排项的item是空的,即一个item中可以没有存储信息,但是该item仍然占据着存储空间,以供后续追加倒排项的时候写入相应的内容。[0057]需要说明的是,词倒排项文件中的每个block都仅属于一个词,即一个block中的所有item都是针对同一个词的;而且,同一个词的所有倒排项可以存储于不同的block中。[0058]4、管理文件;在实际应用中可以使用文件名为data,idx的文件作为管理文件,且该文件通常为全局文件。管理文件的一个具体结构如图6所示。[0059]该管理文件主要用于管理上述词倒排项文件。该管理文件中存储有用于管理词倒排项文件的管理信息。该管理信息可以包括词倒排项文件的总体信息以及每个倒排项文件的信息,如所有词倒排项文件的数量以及每个词倒排项文件所拥有的block的数量等等。[0060]通过利用该管理信息,可以控制新生成的词倒排项文件的文件名等。具体的,词倒排项文件的文件大小是固定的,其所能包含的block的数目也是一定的,因此,在词倒排项文件的文件大小达到最大值时,应根据该管理文件(data,idx)中存储的信息控制生成一个新的词倒排项文件,以继续写入新的倒排项。[0061]基于上述索引结构,本发明实施例还提供一种索引方法,如图7所示,为本发明索引方法的流程图,包括以下步骤:[0062]步骤701,从词表索引文件中获取待检索词的ID;[0063]步骤702,根据所述待检索词的ID从词位置索引文件中获取所述待检索词的倒排项在词倒排项文件中的存储位置信息;[0064]具体地,在确定出所述ID对应的标志位表征与其对应的词,并且经过了预搜索且有搜索结果后,再获取所述待检索词的倒排项在词倒排项文件中的存储位置信息。[0065]步骤703,根据所述存储位置信息所述待检索词对应的词倒排项文件中获取块链的第一个结点的位置信息;[0066]步骤704,根据所述第一个结点的位置信息从相应的词倒排项文件中获取块链的第一个结点,从而获取所述待检索词的所有倒排项。[0067]需要说明的是,针对需要增加倒排项的词,本发明实施例的方法还可进一步包括以下步骤:[0068]从词表索引文件中获取所述需要增加倒排项的词的ID;[0069]根据所述ID从词位置索引文件中获取所述词的倒排项在词倒排项文件中的存储位置信息;[0070]根据所述存储位置信息从所述词对应的词倒排项文件中获取块链的最后一个结点的位置信息;[0071]根据所述最后一个结点的位置信息确定最后一个结点,并根据该最后一个结点的块头中存储的当前块中已存储的倒排项数量在当前块的相应位置增加倒排项。[0072]—个检索的具体例子为:用户输入检索关键词,如“你好”,在接收到该检索关键词后,首先从word_table.1dx文件中查找此词对应的id,并查看该id对应的标志位的取值,如果该标志位的取值表征该词根本没有经过预搜索或者该词已经经过了预搜索但是没有搜索结果,则输出没有搜索结果的信息并结束本次检索过程;如果该标志位的取值表征该词经过了预搜索而且有搜索结果,则执行从word,idx中直接确定出此id对应的倒排项在xxxxxx.dat中的存储位置信息的操作,即确定“你好”的倒排项所在的block链中的第一个结点的位置信息和最后一个结点的位置信息,由于本次进行的是检索操作,因此,只需要获取block链中的第一个结点的位置信息,并根据该第一个结点的位置信息从相应的xxxxxx.dat中提取倒排项即可。[0073]另一个检索的具体例子为:在获取到一个词需要追加的倒排项之后,首先从word_table.1dx文件中查找该词对应的id,并查看该id对应的标志位的取值,如果该标志位的取值表征该词根本没有经过预搜索,则在word,idx中建立该id对应的位置信息,并在相应的xxxxxx.dat中建立相应的块链,以存储需要追加的倒排项;如果该标志位的取值表征该词已经经过了预搜索但是没有搜索结果或者该词经过了预搜索而且有搜索结果,则执行从word,idx中直接确定出此id对应的倒排项在xxxxxx.dat中的存储位置信息的操作,即确定该词的倒排项所在的block链中的第一个结点的位置信息和最后一个结点的位置信息,由于本次进行的是建索操作,因此,只需要获取block链中的最后一个结点的位置信息,并根据该最后一个结点的位置信息在相应的xxxxxx.dat中增加倒排项即可。另外,在上述增加倒排项的过程中,有可能会涉及到增加新的块或者增加新的xxxxxx.dat的过程。[0074]以上所述仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭示如上,然而并非用以限定本发明的技术,任何熟悉本专业的技术人员在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。【权利要求】1.一种索引结构,其特征在于,包括:词表索引文件、词位置索引文件、至少一个词倒排项文件以及管理文件;所述词表索引文件中存储有词与其ID的对应关系信息,且所述词表索引文件用于获取待检索词的ID;所述词位置索引文件中存储有与所述ID对应的词的倒排项在词倒排项文件中的存储位置信息,且所述词位置索引文件用于根据所述待检索词的ID获取对应的存储位置信息;所述存储位置信息包括块链的第一个结点和最后一个结点的位置信息;每个所述词倒排项文件均包括相同大小的块,所述块中存储有倒排项,且一个块仅存储一个词的倒排项,同一个词的倒排项对应的块形成块链结构,所述块链结构的第一个结点用于检索,所述块链结构的最后一个结点用于追加词的倒排项;所述管理文件中存储有用于管理所述词倒排项文件的管理信息。2.如权利要求1所述的索引结构,其特征在于,所述词表索引文件中还存储有每个词对应的标志位,所述标志位用于表示与其对应的词没有经过预搜索、或者与其对应的词经过了预搜索但是没有搜索结果、或者与其对应的词经过了预搜索且有搜索结果。3.如权利要求1所述的索引结构,其特征在于,所述ID为整型。4.如权利要求1或2或3所述的索引结构,其特征在于,所述块包括:块头以及用于存储预定数量的倒排项的存储空间,所述块头用于存储当前块中已存储的倒排项数量。5.如权利要求1或2或3所述的索引结构,其特征在于,每个词倒排项文件的文件大小的最大值相同,且所述倒排项文件的文件大小以块的大小递增,直到倒排项文件的文件大小达到所述最大值。6.如权利要求1或2或3所述的索引结构,其特征在于,所述管理信息包括:所述倒排索引结构当前所包含的词倒排项文件的数量以及每个词倒排项文件所包含的块的数量。7.如权利要求1或2或3所述的索引结构,其特征在于,所述词表索引文件、词位置索引文件、词倒排项文件以及管理文件均为全局文件,且所述词表索引文件常驻内存。8.一种索引方法,其特征在于,该方法包括:从词表索引文件中获取待检索词的ID;根据所述待检索词的ID从词位置索引文件中获取所述待检索词的倒排项在词倒排项文件中的存储位置信息;根据所述存储位置信息所述待检索词对应的词倒排项文件中获取块链的第一个结点的位置信息;根据所述第一个结点的位置信息从相应的词倒排项文件中获取块链的第一个结点,从而获取所述待检索词的所有倒排项。9.如权利要求8所述的索引方法,其特征在于,所述方法在从词表索引文件中获取待检索词的ID之后,在确定出所述ID对应的标志位表征与其对应的词经过了预搜索且有搜索结果时,执行后续的获取所述待检索词的倒排项在词倒排项文件中的存储位置信息的步骤。10.如权利要求8或9所述的索引方法,其特征在于,针对需要增加倒排项的词,所述方法还包括:从词表索引文件中获取所述需要增加倒排项的词的ID;根据所述ID从词位置索引文件中获取所述词的倒排项在词倒排项文件中的存储位置信息;根据所述存储位置信息从所述词对应的词倒排项文件中获取块链的最后一个结点的位置信息;根据所述最后一个结点的位置信息确定最后一个结点,并根据该最后一个结点的块头中存储的当前块中已存储的倒排项数量在当前块的相应位置增加倒排项。【文档编号】G06F17/30GK103699569SQ201310590328【公开日】2014年4月2日申请日期:2013年11月20日优先权日:2013年9月6日【发明者】易中华,伍球,徐波申请人:安徽科大讯飞信息科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1