发明内容
有鉴于此,本发明的主要目的在于提供一种实现数据快速索引的检索***,实现了新增数据源的快速索引。即使在新增数据源数量很多的情况下,也能满足用户即时快速检索的需求,而且达到很高的检索效率和检索精确度。从而使用户在检索服务中的用户体验感大大提高。
本发明的另一目的在于提供一种实现数据快速索引的检索方法,实现了新增数据源的快速索引。即使在新增数据源数量很多的情况下,也能满足用户即时快速检索的需求,而且达到很高的检索效率和检索精确度。从而使用户在检索服务中的用户体验感大大提高。
为达到上述目的,本发明的技术方案是这样实现的:
一种实现数据快速索引的检索***,该***包括:索引文档创建单元、索引文档存储单元和检索服务单元;其中,
索引文档创建单元,用于在基于原始数据源和新增数据源形成主文档存储后,根据具体的检索服务需求,利用所述主文档中数据的不同属性作为索引关键字,创建一个以上不同级别的索引文档并存储在相对应的索引文档存储单元中;同时提供给所述检索服务单元进行检索服务;
索引文档存储单元,用于存储已创建的一个以上不同级别的索引文档;
检索服务单元,用于从所述索引文档存储单元获取所述不同级别的索引文档完成检索服务。
其中,所述索引文档存储单元为至少两个。
其中,所述索引文档存储单元的存储形式为数据库形式。
其中,所述索引文档存储单元包括:微型库、小型库和中型库;相应的,所述索引文档创建单元为索引库创建单元;
并且,所述微型库、所述小型库和所述中型库中皆包括主索引库存储模块和备索引库存储模块;其中,所述主索引库存储模块,用于存储主索引库,并将所述主索引库作为当前索引库提供给所述检索服务单元完成检索服务;所述备索引库存储模块,用于存储备索引库,并将所述备索引库作为更新索引库提供给所述索引库创建单元完成基于所述新增数据源的索引库更新操作。
其中,该***还包括主备索引库切换单元,用于获得所述索引库创建单元的通知后,在所述主索引库存储模块与所述备索引库存储模块之间,切换主索引库和备索引库,完成所述检索服务和所述基于新增数据源的索引库更新操作。
一种实现数据快速索引的检索方法,该方法包括:在基于原始数据源和新增数据源形成主文档存储后,根据具体的检索服务需求,利用所述主文档中数据的不同属性作为索引关键字,创建一个以上不同级别的索引文档并存储在相对应的索引文档存储单元中;同时提供给所述检索服务单元进行检索服务。
其中,相应于所述一个以上不同级别的索引文档,索引文档存储单元为一个以上不同级别的索引库,该方法进一步包括:
A、预先设置所述一个以上不同级别索引库的容量,以及基于所述预先设置的容量获得一个以上不同级别索引库的级别;
B、根据当前新增数据源,以及所述一个以上不同级别索引库的级别更新已创建的所述一个以上不同级别索引库。
其中,所述预先设置容量小的索引库为预先设置容量大的索引库的上级索引库;预先设置容量大的索引库为预先设置容量小的索引库的下级索引库,则步骤B具体为:
B1、当上级索引库达到预先设置的容量后,索引库创建单元通知与所述上级索引库对应的下级索引库,使所述下级索引库基于所述当前新增数据源和为其预先设置的容量更新并重新创建索引文档;当下级索引库创建完毕后,所述索引库创建单元通知上级索引库重新创建索引文档。
其中,步骤B进一步为:对所述一个以上不同级别索引库预先设置状态标识后,根据当前具体需求修改所述状态标识,并采用基于状态标识记录一个以上不同级别索引库的状态变迁的方式实现总索引数据的完整性。
其中,步骤B后还包括:主备索引库切换单元启动切换线程,在所述一个以上不同级别索引库中,切换每一级别索引库中的主索引库和备索引库。
本发明基于原始数据源和新增数据源形成主文档存储后,针对具体的检索服务需求,利用主文档中数据的不同属性作为索引关键字,创建了多个不同级别的索引文档并存储在相对应的索引库中,以便于将多个不同级别的索引文档同时提供给用户进行检索服务。这里,该索引文档是基于主文档的多级别的索引文档。具体来说,针对主文档中的数据,创建多级别的索引文档并存储在相对应的索引库中。比如按照索引文档中的数据量,多级别的索引文档包括三个级别,那么相应于该多级别的索引文档,索引库也包括微型库、小型库和中型库三个级别。而且三个级别索引库的容量各不相同,微型库容量最小。这样当有新增数据源时,基于新增数据源形成主文档存储后,对微型库中的索引文档进行重建,该过程能控制在几秒完成,能够快速的提供给用户进行检索服务,满足了用户即时快速检索的需求。而且基于新增数据源重建的索引文档能完成及时更新,可以达到很高的检索效率和检索精确度。从而使用户在检索服务中的用户体验感大大提高。
综上所述,采用本发明,一方面,当有新增数据源时,能够及时快速地创建索引文档并提供给用户进行检索服务,满足了用户即时快速检索的需求。另一方面,本发明采用多级别的索引文档优化了检索效率和检索精确度,从而减轻了检索***全量重建索引文档的压力,能够提供给用户更好的用户体验感。
具体实施方式
本发明的核心思想是:本发明基于原始数据源和新增数据源形成主文档存储后,根据具体的检索服务需求,利用主文档中数据的不同属性作为索引关键字,创建了多个不同级别的索引文档并存储在相对应的索引库中,以便于同时提供给用户进行检索服务。满足了用户即时快速检索的需求。而且基于新增数据源重建的索引文档能完成及时更新,可以达到很高的检索效率和检索精确度。从而使用户在检索服务中的用户体验感大大提高。
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对本发明进一步详细说明。
一种实现数据快速索引的检索***,该***包括:索引文档创建单元、索引文档存储单元和检索服务单元。
其中,索引文档创建单元,用于在基于原始数据源和新增数据源形成主文档存储后,根据具体的检索服务需求,利用主文档中数据的不同属性作为索引关键字,创建多个不同级别的索引文档并存储在相对应的索引文档存储单元中;同时提供给检索服务单元进行检索服务。索引文档存储单元,用于存储已创建的多个不同级别的索引文档。检索服务单元,用于从所述索引文档存储单元获取所述不同级别的索引文档完成检索服务。
这里,所述索引文档存储单元的存储形式为数据库形式。并且所述索引文档存储单元为至少两个。比如所述索引文档存储单元为两个,那么针对每一个索引文档存储单元而言,每一个索引文档存储单元中存储同一级别的索引文档。针对这两个索引文档存储单元而言,两个索引文档存储单元分别存储不同级别的索引文档。也就是说,多个不同级别的索引文档,分别存储在相对应的索引文档存储单元中。
***实施例一为:索引文档存储单元包括微型库、小型库和中型库;相应的,索引文档创建单元为索引库创建单元。
如图1所示,本实施例中的***包括:索引库创建单元11、微型库21、小型库22、中型库23、检索服务单元41。该***还包括主备索引库切换单元31。并且,微型库21、小型库22和中型库23中皆包括主索引库存储模块和备索引库存储模块。
其中,主索引库存储模块,用于存储主索引库,并将主索引库作为当前索引库提供给检索服务单元41完成检索服务。备索引库存储模块,用于存储备索引库,并将备索引库作为更新索引库提供给索引库创建单元11完成基于新增数据源的索引库更新操作。主备索引库切换单元31,用于获得索引库创建单元11的通知后,在主索引库存储模块与备索引库存储模块之间,切换主索引库和备索引库,完成所述检索服务和所述基于新增数据源的索引库更新操作。
这里,需要指出的是,同时在微型库21、小型库22和中型库23中都提供主索引库存储模块来存储主索引库,以及备索引库存储模块来存储备索引库,既满足了用户当前的检索服务,又能基于新增数据源完成索引库的更新操作。大大提高了检索效率和检索精确度。从而减轻了检索***全量重建索引文档的压力,能够提供给用户更好的用户体验感。
举例来说,针对主索引库和备索引库重新创建新索引库,并在新旧索引库之间切换来提高检索效率和检索精确度的处理过程为:最初,主索引库和备索引库中的索引文档是完全一样的。之后,当基于新增数据源更新索引库时,可以采用主索引库作为当前索引库,并提供给检索服务单元41以满足用户当前的检索服务。这里,由于主索引库中的索引文档是之前就创建好的旧索引文档,因此主索引库也可以理解为旧索引库。而备索引库此时是作为更新索引库使用的。由于备索引库基于新增数据源更新并重新创建索引文档,因此备索引库也可以理解为新索引库。最后,当备索引库创建完毕后,通过主备索引库切换单元31切换主索引库和备索引库,那么当前创建完毕的备索引库即新索引库被切换为当前主索引库,来提供给检索服务单元41,以满足用户当前的检索服务。而之前提供检索服务的主索引库即旧索引库被切换为当前备索引库。释放当前备索引库,以备下一轮索引库的创建和切换。
这里,微型库21中的主索引库存储模块以第一主索引库存储模块211表示,微型库21中的备索引库存储模块以第一备索引库存储模块212表示;小型库22中的主索引库存储模块以第二主索引库存储模块221表示,小型库22中的备索引库存储模块以第二备索引库存储模块222表示;中型库23中主索引库存储模块以第三主索引库存储模块231表示,中型库23中备索引库存储模块以第三备索引库存储模块232表示。
以下针对微型库、小型库和中型库进行具体阐述。
在本实施例中,由于创建索引时采用三级索引库方式,因此索引文档存储单元包括微型库、小型库和中型库。并且微型库、小型库和中型库各自单独建库,每个库配置的索引文档数目不同,从而微型库、小型库和中型库的容量也不同,微型库容量最小。
对于不同级别索引库,索引库内的起始索引文档编号需要区别开来。比如微型库配置的容量为10000,那么索引文档编号的取值范围为[0,9999];比如小型库配置的容量为100000,那么索引文档编号的取值范围为[10000,109999];比如中型库配置的容量为10000000,那么索引文档编号的取值范围为[110000,10109999]。也就是说,微型库索引文档编号的基数为0,小型库索引文档编号的基数为10000,中型库索引文档编号的基数为110000,并且各个库的索引文档编号在此基数上偏移。
一种实现数据快速索引的检索方法,该方法包括:
步骤101、在基于原始数据源和新增数据源形成主文档存储后,根据具体的检索服务需求,利用主文档中数据的不同属性作为索引关键字,创建多个不同级别的索引文档并存储在相对应的索引文档存储单元中;同时提供给检索服务单元进行检索服务。
这里,相应于多个不同级别的索引文档,索引文档存储单元为多个不同级别的索引库。而且,各级别索引库中所存储索引文档的数目不同,使各级别索引库的容量不同。
如图2所示,步骤101的具体处理过程进一步为:
步骤1011、预先设置多个不同级别索引库的容量,以及基于设置的多个不同级别索引库的容量获得多个不同级别索引库的级别。
这里需要指出的是,为了保证后续多个不同级别索引库重新创建和切换过程中,多个不同级别索引库之间存储的索引文档既不重复,也不出现间断,从而实现总的索引数据的完整性。那么对于多个不同级别索引库来说,可以根据每一级别索引库的处理索引文档的复杂程度,预先设置每一级别索引库能存储索引文档的最大数目,也就是预先设置每一级别索引库的最大容量。
这里,在多个不同级别索引库中,按照设置的各级别索引库最大容量由小到大的顺序,可以获知索引库的级别。比如,各级别的索引库分别为微型库、小型库和中型库,而且预先设置微型库的最大容量为最小,小型库的最大容量次之,中型库的最大容量为最大。那么微型库是小型库的上级索引库,小型库是微型库的下级索引库。同样地,小型库是中型库的上级索引库,中型库是小型库的下级索引库。
步骤1012、根据当前新增数据源,以及多个不同级别索引库的级别更新已创建的多个不同级别索引库;同时将创建完毕的多个不同级别索引库提供给检索服务单元进行检索服务。
由于预先设置容量小的索引库为预先设置容量大的索引库的上级索引库。反之,预先设置容量大的索引库为预先设置容量小的索引库的下级索引库。那么,步骤1012的具体处理过程为:
当上级索引库达到预先设置的容量后,索引库创建单元通知与该上级索引库对应的下级索引库,使该下级索引库基于当前新增数据源和预先设置的容量更新并重新创建索引文档,比如微型库通知小型库重新创建索引文档,或者小型库通知中型库重新创建索引文档;当该下级索引库创建完毕后,索引库创建单元通知上级索引库重新创建索引文档。
这里需要指出的是,在上述步骤1012的具体处理过程中,在多个不同级别索引库中,当对各级别索引库中存储的索引文档进行更新并重新创建完毕后,主备索引库切换单元获得索引库创建单元的通知后,启动切换线程,在每一级别索引库中的主索引库存储模块与备索引库存储模块之间,主备索引库切换单元切换主索引库和备索引库,并切换到最新创建的索引文档,将该最新创建的索引文档提供给检索服务单元进行检索服务。
这里需要指出的是,为了进行有效控制和避免出现死锁,同时也为了保证各级别索引库中存储的索引文档既不重复,也不出现间断,以保证总的索引数据的完整性。步骤1012进一步为:在多个不同级别索引库中,对各级别索引库设置状态标识后,根据当前具体需求修改状态标识,并采用基于状态标识记录各级别索引库的状态变迁的方式实现总的索引数据的完整性。
方法实施例一为:创建索引时采用三级索引库方式,索引文档存储单元包括微型库、小型库和中型库。并且微型库、小型库和中型库各自单独建库,每个库配置的索引文档数目不同,从而微型库、小型库和中型库的容量也不同,微型库容量最小。
并且,在微型库、小型库和中型库的重新创建和切换过程中,为了保证总的索引数据的完整性。根据它们处理文档的复杂程度,预先设定了每个级别索引库的最大容量。具体来说,预先设定微型库的最大容量为N1,并且N1=2000。那么,微型库能存储索引文档的最大数目为2000。同样地,预先设置小型库的最大容量为N2,并且N2=20000。中型库的最大容量为N3。这里,N3的设定对后续索引切换不具有参考意义,只跟内存容量和文档复杂程度有关。
另外,图3~图11为各级别索引库中索引文档对应索引数据的变化示意图。用于指示随着各级别索引库的重新创建和切换过程所导致索引数据总数目的变化,以及各级别索引库重新创建前所读取索引数据的起始和结束位置的变化,以及各级别索引库重新创建后所读取索引数据的起始和结束位置的变化。从图3~图11中可以直观获知,在各级别索引库的重新创建和切换过程中,多个不同级别索引库之间存储的索引数据既不重复,也不出现间断,总的索引数据是完整的。
这里,图3~图11中所涉及到标记的命名规则为:用a代表当前源索引数据的大小;用b2代表中型库的读取范围,b1代表小型库的读取范围,b0代表微型库的读取范围;用cx代表各级别索引库重新创建前后所读取索引数据的起始位置,并且x>=1,x为整数。比如,以图3为例进行说明,图3为微型库创建前各级别索引库中索引文档对应的索引数据变化示意图。那么,就中型库的读取范围而言,图3中的c1表示中型库的读取起始位置,同时该位置也是当前源索引数据的起始位置;c2表示中型库的读取结束位置。就小型库的读取范围而言,c2表示小型库的读取起始位置,c3表示小型库的读取结束位置。就微型库的读取范围而言,c3表示微型库的读取起始位置;c4表示微型库的读取结束位置,同时该位置也是当前源索引数据的结束位置。
综上所述,为了更好地阐述本实施例的实现流程,以下结合图3~图11中各级别索引库重新创建前后所读取索引数据的起始位置变化,对本实施例的实现流程进行说明。
本实施例中,实现数据快速索引的检索方法的实现流程包括以下步骤:
步骤201、索引库创建单元根据预先设置的时间间隔,比如每隔10秒通知微型库启动创建线程来重新创建一次索引文档。并且每次统计出本次创建的索引文档的数目。
这里,该索引文档的数目为M1,预先设置微型库的最大容量为N1。
这里,微型库创建前的读取范围如图3所示。基于新增数据源微型库重新创建索引文档后,创建后的读取范围如图4所示。这里,当前源索引数据的结束位置如图4中的c5所示。
步骤202、判断当前本次索引文档的数目是否达到或者超过了微型库的最大容量的一半即M1>=N1/2,如果M1>=N1/2,则索引库创建单元通知小型库启动创建线程,小型库开始重新创建一次索引文档,之后执行步骤203;否则,M1<N1/2,执行步骤206。
步骤203、小型库的创建线程从中型库上次读取之后的结束位置开始读取数据,直至读取到微型库上次已经读取过的位置,覆盖掉微型库中的索引文档。
这里,小型库创建前的读取范围如图4所示。微型库创建完毕,达到小型库容量一半时触发小型库的创建,此时小型库的读取范围如图5所示。这里,中型库上次读取之后的结束位置如图5中的c2所示;微型库上次已经读取过的位置如图5中的c5所示。小型库未创建完毕,基于新增数据源微型库重新创建时,此时小型库的读取范围如图6所示。这里,当前源索引数据的结束位置如图6中的c6所示。
步骤204、当小型库创建完毕后,索引库创建单元通知微型库重新创建一次索引文档。之后,微型库的创建线程从小型库上次读取之后的结束位置开始读取数据,直至读取到最新的当前源索引数据的结束位置。从而使得小型库和微型库的索引文档刚好衔接上,没有重复也没有空档。
这里,小型库创建完毕,微型库从新位置重新创建时,此时微型库的读取范围如图7所示。这里,小型库上次读取之后的结束位置如图7中的c5所示,当前源索引数据的结束位置如图7中的c6所示。
步骤205、微型库和小型库都创建完毕后,索引库创建单元通知主备索引库切换单元启动切换线程,并通知微型库和小型库分别切换到当前最新的索引文档,将该最新创建的索引文档提供给检索服务单元进行检索服务。转入执行步骤207。
步骤206、索引库创建单元通知主备索引库切换单元启动切换线程进行微型库的切换,主备索引库切换单元在微型库中的主索引库存储模块与备索引库存储模块之间,切换主索引库和备索引库,并切换到最新创建的索引文档,将该最新创建的索引文档提供给检索服务单元进行检索服务。转入执行步骤211。
步骤207、当小型库创建索引文档时,统计索引文档的数目为M2,而预先设置小型库的最大容量为N2。那么,判断当前本次索引文档的数目是否达到或者超过了小型库的最大容量的一半即M2>=N2/2,如果M2>=N2/2,则执行步骤208;否则,M2<N2/2,执行步骤210。
步骤208、索引库创建单元通知中型库启动创建线程,中型库开始重新创建一次索引文档。之后,中型库的创建线程从初始有效文档的位置开始读取数据,直至读取到小型库上次已经读取过的位置,覆盖掉小型库中的索引文档。
这里,中型库创建前的读取范围如图7所示。小型库创建完毕,达到中型库容量一半时触发中型库的创建,此时中型库的读取范围如图8所示。这里,初始有效文档的位置,即当前源索引数据的起始位置如图8中的c1所示;小型库上次已经读取过的位置如图8中的c5所示。
这里,中型库未创建完毕,基于新增数据源微型库重新创建时,各级别索引库所读取索引数据的起始和结束位置的变化如图9所示。后续中型库创建完毕,触发小型库从新位置重新创建时,各级别索引库所读取索引数据的起始和结束位置的变化如图10所示。后续小型库创建完毕,触发微型库从新位置重新创建时,各级别索引库所读取索引数据的起始和结束位置的变化如图11所示。
这里需要指出的是,由于中型库未创建完毕,基于新增数据源微型库重新创建的过程;后续中型库创建完毕所触发小型库重新创建的过程;以及后续小型库创建完毕所触发微型库重新创建的过程中,这些过程所涉及到的原理和图,同上述基于小型库的创建所触发微型库重新创建过程的原理类似。因此,这里不做过多阐述。
步骤209、中型库创建完毕后,转入执行步骤203来创建小型库。当微型库、小型库和中型库都创建完毕后,索引库创建单元通知主备索引库切换单元启动切换线程,并通知微型库、小型库和中型库分别切换到当前最新的索引文档,将该最新创建的索引文档提供给检索服务单元进行检索服务。转入执行步骤211。
步骤210、索引库创建单元通知主备索引库切换单元启动切换线程进行小型库的切换,主备索引库切换单元在小型库中的主索引库存储模块与备索引库存储模块之间,切换主索引库和备索引库,并切换到最新创建的索引文档,将该最新创建的索引文档提供给检索服务单元进行检索服务。
步骤211、结束当前实现数据快速索引检索的实现流程。
这里需要指出的是,在各级别索引库的创建和切换过程中,为了便于控制索引库的创建和切换,需要识别出各级别索引库当前所处的状态。那么,可以预先对各级别索引库设置状态标识,然后根据当前具体需求修改状态标识,并基于状态标识记录各级别索引库的状态变迁,从而达到便于控制索引库创建和切换的目的。而且,采用这种基于状态标识记录各级别索引库的状态变迁的方式还可以实现总的索引数据的完整性。
以下对基于状态标识记录各级别索引库的状态变迁的方式进行具体阐述。
在多个不同级别索引库中,为各级别索引库预先设置了四种状态,分别以状态标识UNSTARTED、START_NOT_FINISH、FINISH_BUT_WAIT和FINISH_NO_WAIT表示。其中,用UNSTARTED表示各级别索引库处于未开始创建的状态;用START_NOT_FINISH表示各级别索引库处于开始创建但未完成的状态;用FINISH_BUT_WAIT表示各级别索引库处于已经创建完毕、但还需要等待上级索引库创建完毕的状态;用FINISH_NO_WAIT表示各级别索引库处于已经创建完毕、无需等待、可以直接切换的状态。并且,各级别索引库的状态在上述四种状态之间进行切换。
当各级别索引库为微型库、小型库和中型库时,这三级索引库对应的四种状态如下面的表1~表6所示。其中,表1为未填写状态标识的空表。
|
UNSTARTED |
START_NOT_FINISH |
FINISH_BUT_WAIT |
FINISH_NO_WAIT |
微型库 |
|
|
|
|
小型库 |
|
|
|
|
中型库 |
|
|
|
|
表1
|
UNSTARTED |
START_NOT_FINISH |
FINISH_BUT_WAIT |
FINISH_NO_WAIT |
微型库 |
|
|
|
√ |
小型库 |
√ |
|
|
|
中型库 |
√ |
|
|
|
表2
|
UNSTARTED |
START_NOT_FINISH |
FINISH_BUT_WAIT |
FINISH_NO_WAIT |
微型库 |
|
|
|
√ |
小型库 |
|
√ |
|
|
中型库 |
√ |
|
|
|
表3
|
UNSTARTED |
START_NOT_FINISH |
FINISH_BUT_WAIT |
FINISH_NO_WAIT |
微型库 |
|
|
|
√ |
小型库 |
|
|
|
√ |
中型库 |
√ |
|
|
|
表4
|
UNSTARTED |
START_NOT_FINISH |
FINISH_BUT_WAIT |
FINISH_NO_WAIT |
微型库 |
|
|
|
√ |
小型库 |
|
|
|
√ |
中型库 |
|
√ |
|
|
表5
|
UNSTARTED |
START_NOT_FINISH |
FINISH_BUT_WAIT |
FINISH_NO_WAIT |
微型库 |
|
|
|
√ |
小型库 |
|
|
|
√ |
中型库 |
|
|
|
√ |
表6
综上所述,基于状态标识记录各级别索引库的状态变迁的方式,来实现总的索引数据完整性的具体处理过程为:
a1、触发启动重新创建索引库的操作,比如索引库创建单元通知微型库启动创建线程来重新创建一次索引文档。
这里,微型库的状态标识由UNSTARTED切换到START_NOT_FINISH。那么微型库当前处于开始创建索引文档但未完成的状态。
a2、微型库重新创建索引文档完毕后,如果微型库不需要触发上级索引库中索引文档的重新创建,则微型库回调并修改状态。此时微型库直接变为可切换状态。
这里,微型库的状态标识由START_NOT_FINISH切换到FINISH_NO_WAIT。那么微型库当前处于已经创建完毕、无需等待、可以直接切换的状态。并且,此时可以由主备索引库切换单元在微型库中的主索引库存储模块与备索引库存储模块之间,切换主索引库和备索引库。
a3、当微型库到达可切换状态后,启动切换线程将索引文档更新完毕的微型库切换到在线检索模式,同时将微型库的状态修改为初始状态。
这里,微型库的状态标识由FINISH_NO_WAIT切换到UNSTARTED。那么微型库当前返回初始状态,微型库完成一次索引文档的重新创建过程。
或者,基于状态标识记录各级别索引库的状态变迁的方式,来实现总的索引数据完整性的具体处理过程还可以为:
b1、触发重新创建索引库的操作,比如索引库创建单元通知小型库启动创建线程来重新创建一次索引文档。
这里,小型库的状态标识由UNSTARTED切换到START_NOT_FINISH。那么小型库当前处于开始创建索引文档但未完成的状态。
b2、小型库重新创建索引文档完毕后,如果小型库需要触发上级索引库即微型库中索引文档的重新创建,则小型库回调并修改状态。此时小型库需要等待微型库中索引文档的重新创建完毕后,才能变为可切换状态。
这里,小型库的状态标识由START_NOT_FINISH切换到FINISH_BUT_WAIT。那么小型库当前处于已经创建完毕、但还需要等待微型库创建完毕的状态。
b3、微型库创建完毕后,修改小型库的状态到可切换状态。
此时,小型库的状态标识由FINISH_BUT_WAIT切换到FINISH_NO_WAIT。那么小型库当前处于已经创建完毕、无需等待、可以直接切换的状态。
b4、当小型库到达可切换状态后,启动切换线程将索引文档更新完毕的小型库切换到在线检索模式,同时将小型库的状态修改为初始状态。
这里,小型库的状态标识由FINISH_NO_WAIT切换到UNSTARTED。那么小型库当前返回初始状态。小型库和微型库完成索引文档的重新创建过程。
这里需要指出的是,在各级别索引库的创建和切换过程中,需要考虑到总索引数据的完整性,那么相应于各级别索引库之间的切换分为以下几种情况。
第一种情况为基于新增数据源只有微型库更新的情况。在这种情况下,只需要切换微型库,具体来说就是切换微型库中的主索引库和备索引库。这里,微型库的起始位置就是小型库的结束位置,微型库的结束位置就是最新数据的结束位置。
这种情况包括两方面内容。一方面是,当新增数据源到达且M1<N1/2时,微型库进行倒排处理。并且微型库中的索引文档更新和重建完成后,不需要触发小型库中索引文档的更新和重建。这里,只进行微型库的切换。此时,各级别索引库所对应的状态如表2所示。另一方面是,当新增数据源到达且M1>=N1/2时,微型库进行倒排处理。并且微型库中的索引文档更新和重建完成后,同时通知小型库启动创建线程,小型库中的索引文档被更新和重建。这里,在小型库中索引文档更新和重建完毕之前,仍只进行微型库的切换。此时,各级别索引库所对应的状态如表3所示。
第一种情况为基于新增数据源微型库和小型库都更新的情况。在这种情况下,需要切换微型库和小型库这两级索引库。这种情况也包括两方面内容。一方面是,微型库和小型库中的索引文档都更新和重建完毕。这里只进行微型库和小型库的切换。此时,各级别索引库所对应的状态如表4所示。另一方面是,微型库和小型库中的索引文档都更新和重建完毕后,同时通知小型库启动创建线程,触发中型库中的索引文档的更新和重建。但是,由于中型库中的索引文档还没有重建完成,因此这里只进行微型库和小型库的切换。此时,各级别索引库所对应的状态如表5所示。
第三种情况为基于新增数据源微型库、小型库和中型库都更新的情况。在这种情况下,需要切换微型库、小型库和中型库这三级索引库。此时,各级别索引库所对应的状态如表6所示。并且在切换时,需要判断各级别索引库之间的起始和结束位置是否衔接,当遇到有重复的需要清理掉,使各级别索引库中存储的索引文档既不重复,也不出现间断,以保证总的索引数据的完整性。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。