背景技术
随着互联网技术的发展,为了满足互联网用户对不同领域信息的获取需求,信息搜索技术成为当前非常热门的互联网技术之一。互联网中的信息搜索服务是由互联网中的各种搜索引擎提供的,搜索引擎的数据库中集中了大量的信息,搜索引擎的功能是从数据库中搜索用户所需的信息。
对于搜索引擎中新入库的信息,通常需要进行切词、编码、顺排、倒排等操作,生成索引和对应的数据,并根据生成的索引和数据对原来的索引进行重建。对于数据量较小的信息,上述的切词、编码、顺排、倒排等操作可以在内存中完成,且生成的索引和数据也可以存储在内存中;而对于数据量较大的信息,则是由磁盘对生成的索引和数据进行存储。因此,现有技术中通常是采用内存和磁盘相结合的构架进行信息存储的,搜索引擎所接收的新数据先由内存进行加载,再定期将内存中加载的新数据发送给磁盘进行加载;当然,内存和磁盘中的索引也需要随着新数据的加载进行更新重建。具体的处理流程如图1所示,主要包括以下步骤:
步骤101,判断是否触发磁盘索引更新,如果是,则转到步骤102;否则,转到步骤103。
磁盘索引更新的操作是由设定的磁盘更新周期来触发的,在每次磁盘更新周期结束的时刻即为磁盘索引更新的时间点,搜索引擎开始触发进行磁盘索引更新的操作。
步骤102,搜索引擎将内存所存储的在最近一个磁盘更新周期内接收到的所有新数据发送给磁盘,由磁盘根据所接收的新数据进行磁盘索引的重建,并进行新数据的加载,然后结束当前流程。其中,搜索引擎接收到的新数据中包括:删除文档列表、新增文档列表和更新文档列表的至少一种。
步骤103,搜索引擎将接收的新数据提供给内存。
步骤104,内存根据接收的新数据进行内存索引的重建,并进行新数据的加载。
在实际应用中,用户对诸如知识型搜索、新闻搜索和论坛搜索等等的搜索结果的时效性要求较高,希望最新的信息能够尽可能的及时搜索到。这就要求搜索引擎能够以尽可能快的更新速度完成新信息的索引更新重建和检索服务的提供。虽然内存索引重建的速度比磁盘索引重建的速度更快,但是由于内存每接收到新数据时就得进行索引重建,因此,内存索引重建的时间也会随着内存中数据量的增大而线性增长;也就是说,在一个磁盘更新周期内,内存中的数据更新速度会越来越慢。
由此可知,由于现有技术中搜索引擎会先将数据发送至内存,这样,内存索引更新的速度必然会随着内存中的数据量的不断增大而变得越来越慢,从而导致现有技术达不到用户对搜索结果的高时效性要求,给用户带来不便。
发明内容
有鉴于此,本发明的主要目的在于提供一种用于索引更新的处理方法和***,以解决现有技术中由于内存索引的更新速度慢而导致信息搜索时效性不高的问题。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种用于索引更新的处理***,该***包括:
数据接收子***,用于接收新数据,所述新数据包括删除文档列表、新增文档列表和更新文档列表的至少一种;
数据分发子***,用于对所述新数据进行分发;
多级索引内存子***,包括多级索引,且所述多级索引中的各级索引的数据容量从上级到下级依次递增,数据由上级索引到下级索引逐级传递;
所述多级索引内存子***包括:数据传递模块、索引重建模块和索引切换模块,其中,
所述数据传递模块,用于通过第一级索引对来自所述数据分发子***的新数据进行接收,并将所述新数据由所述第一级索引逐级传递到其他各级索引;
所述索引重建模块,与数据传递模块相连,用于根据所述第一级索引接收的新数据对所述第一级索引进行重建,并在所述新数据由所述第一级索引逐级传递到其他各级索引时,根据所传递的新数据对所述其他各级索引依次进行重建;所述各级索引由主索引和备索引构成,索引的重建是对所述主索引和备索引中的其中一个索引进行重建;在索引重建完毕之后,将所述主索引和备索引更新为重建后的索引;
所述索引切换模块,与所述索引重建模块相连,用于在所述各级索引的主索引和备索引中的其中一个索引进行重建时,将服务切换到另一个索引。
所述***还包括:磁盘索引子***,用于根据来自所述数据分发子***或多级索引内存子***的新数据,对磁盘索引进行重建。
所述数据接收子***进一步包括:
数据检测模块,用于检测每个检测周期内的新数据;
数据合并模块,用于所述数据检测模块在检测周期内检测到多批新数据时,对所述多批新数据进行合并,并将所述合并后的新数据提供给所述数据分发子***。
所述多级索引内存子***进一步包括:
管理模块,与所述数据传递模块和索引重建模块相连,用于通过循环文件对所述多级索引内存子***中的文档进行管理,并通过全局文档表对所述多级索引内存子***中的索引进行管理。
本发明还提供了一种用于索引更新的处理方法,该方法包括:
通过多级索引内存子***的多级索引中的第一级索引接收来自数据分发子***的新数据,所述新数据包括删除文档列表、新增文档列表和更新文档列表的至少一种,且所述多级索引中的各级索引的数据容量从上级到下级依次递增,数据由上级索引到下级索引逐级传递;
根据所接收的新数据对所述第一级索引进行重建;
在所述新数据由所述第一级索引逐级传递到其他各级索引时,根据所述新数据对所述其他各级索引依次进行重建;
所述各级索引由主索引和备索引构成,索引的重建是对所述主索引和备索引中的其中一个索引进行重建,并将服务切换到另一个索引,在索引重建完毕之后,将所述主索引和备索引更新为重建后的索引。
所述新数据由第一级索引逐级传递到其他各级索引,具体包括:在上级索引的数据量达到设定的门限值时,将所述上级索引中的新数据传递到下级索引,触发所述下级索引进行重建,并将所述上级索引中已传递的新数据删除。
该方法进一步包括:在所述多级索引中的最后一级索引的数据量达到设定的门限值时,将所述最后一级索引中的新数据传递给磁盘索引子***,触发所述磁盘索引子***进行磁盘索引重建,并将所述最后一级索引中已传递的新数据删除。
该方法进一步包括:所述数据分发子***根据所述删除文档列表、新增文档列表和更新文档列表生成由文档标识组成的序列文件,并在每次磁盘更新周期结束时刻,将本次磁盘更新周期内接收的新数据和生成的序列文件发送给磁盘索引子***,触发所述磁盘索引子***进行磁盘索引重建。
该方法进一步包括:通过循环文件对所述多级索引内存子***中的文档进行管理。
该方法进一步包括:通过全局文档表对所述多级索引内存子***中的各级索引进行管理。
本发明所提供的一种用于索引更新的处理方法和***,采用多级索引的内存索引结构,通过多级索引中的第一级索引接收新数据,并根据所接收的新数据对第一级索引进行重建;在新数据由第一级索引逐级传递到其他各级索引时,根据新数据对其他各级索引依次进行重建。由于第一级索引的数据容量比较小,索引重建速度非常快,当有新数据到达第一级索引时,只需要很短的时间即可完成第一级索引的索引重建,也就只需要很短的时间就可以从第一级索引中搜索到该数据,从而提高了索引重建速度,充分满足用户对搜索时效性要求,增加了用户的使用体验。
具体实施方式
下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。
本发明所提供的一种用于索引更新的处理***,如图2所示,该***包括:数据接收子***10、数据分发子***20、多级索引内存子***30和磁盘索引子***40。
其中,数据接收子***10,用于接收新数据。所谓新数据,是指数据接收子***10新接收的数据,该新数据中包括删除文档列表、新增文档列表和更新文档列表的至少一种。删除文档列表中包括需要删除的文档标识(ID,IDentity);新增文档列表中包括需要增加的文档ID及对应的新增文档;更新文档列表中包括需要更新的文档ID及对应的更新文档。
数据分发子***20,与数据接收子***10相连,用于对来自数据接收子***10的新数据进行分发。数据分发子***20将来自数据接收子***10的新数据发送给多级索引内存子***30;并根据设定的磁盘更新周期,在每次磁盘更新周期结束时刻,数据分发子***20将该磁盘更新周期内所接收的所有新数据发送给磁盘索引子***40。
多级索引内存子***30,与数据分发子***20相连,多级索引内存子***30包括多级索引,如图3所示,各级索引的数据容量从上级到下级依次递增,多级索引中的数据是由上级索引到下级索引逐级传递的,且各级索引都由主索引和备索引构成。图3为一个n级索引,L1_Index表示n级索引的第一级索引,Ln_Index表示n级索引的最后一级索引,从图3中可以看出,对多级索引进行信息搜索时,是对各级索引都进行搜索,从而得到最终的搜索结果。本发明中为各级索引分别设有数据传递的门限值,当某级索引中的数据量达到对应的门限值时,该级索引将自身的新数据传递给下级索引。
以3级索引为例对数据在各级索引间的传递进行说明,L1_Index的数据容量为2兆,L2_Index的数据容量为8兆,L3_Index的数据容量为20兆。设定L1_Index的门限值为1兆,L2_Index的门限值为4兆,L3_Index的门限值为10兆。L1_Index对来自数据分发子***20的新数据进行接收,并根据接收的新数据对L1_Index进行索引重建,且L1_Index每次接收到新数据,都需要对自身索引进行重建;在L1_Index中的数据量达到1兆时,L1_Index将自身当前的新数据全部传递给L2_Index,传递结束后,L1_Index将已经传递的新数据从L1_Index中删除。同样地,L2_Index接收来自L1_Index的新数据,并根据接收的新数据进行自身索引的重建,且L2_Index每次接收到新数据,都需要对自身索引进行重建;在L2_Index中的数据量达到4兆时,L2_Index将自身当前的新数据全部传递给L3_Index,触发L3_Index进行索引重建,传递结束后,L2_Index将已经传递的新数据从L2_Index中删除。
从上述的举例中可以看出,上级索引将数据传递给下级索引后,上级索引中的数据删除,从而可以保证多级索引中的数据不发生重复。另外,各级索引对应的门限值可以根据实际需要进行设定,但是通常设定的每级索引对应的门限值都要小于各级索引的数据容量,从而保证各级索引在数据量达到门限值并进行数据的传递时,还有空间用来接收上级索引的新数据。
磁盘索引子***40,与数据分发子***20相连,数据分发子***20在每次磁盘更新周期结束时刻,将自身所存储的本次磁盘更新周期内所接收的所有新数据发送给磁盘索引子***40,由磁盘索引子***40根据接收的新数据进行磁盘索引的重建。可以看出,磁盘索引子***40每经过一个磁盘更新周期,都会根据数据分发子***20发送的新数据进行磁盘索引的重建,使得磁盘索引子***40中的信息能够得到及时的更新。相应的,由于多级索引内存子***30中所存储的所有新数据都有其对应的接收时间,多级索引内存子***30在每次磁盘更新周期的结束时刻,将多级索引中存储的在本次磁盘更新周期内所接收的新数据以及对应的索引删除,以防止多级索引内存子***30中的数据与磁盘索引子***40中出现重复。
上述的数据接收子***10还包括相互连接的数据检测模块11和数据合并模块12。数据检测模块11,用于检测每个检测周期内的新数据。检测周期的大小可以根据实际需要进行设定;数据检测模块11根据设定的检测周期,检测每个检测周期内是否有新数据的到来。数据合并模块12,用于数据检测模块11在检测周期内检测到多批新数据时,对检测到的多批新数据进行合并,并将合并后的新数据提供给数据分发子***20。本发明中设定检测周期,并对每个检测周期内的多批新数据进行合并,以固定的周期向数据分发子***20提供新数据,可以降低多级索引内存子***30在索引重建上的时间抖动。例如:检测周期为2秒,在2秒内检测到两批新数据A、B,进行数据合并后提供给数据分发子***20,会触发多级索引内存子***30进行一次索引重建;相比现有技术中新数据A触发一次索引重建,新数据B再触发一次索引重建,本发明中的索引重建时间波动较小,从而可以降低多级索引内存子***30在索引重建上的时间抖动。
上述的数据分发子***20还包括:磁盘更新周期设定模块21、序列文件生成模块22和数据分发模块23。磁盘更新周期设定模块21,用于设定磁盘更新周期。序列文件生成模块22,用于根据接收的新数据中所包含删除文档列表、新增文档列表和更新文档列表生成由文档ID组成的序列文件,该序列文件中还包括各个文档对应的状态,例如:对于需要删除的文档,文档ID对应的状态为删除,对于新增和更新的文档,文档ID对应的状态为有效。数据分发模块23,与磁盘更新周期设定模块21和序列文件生成模块22相连,用于将接收的新数据发送给多级索引内存子***30,并根据设定的磁盘更新周期,在每次磁盘更新周期结束时刻,将本次磁盘更新周期内接收的新数据和生成的序列文件发送给磁盘索引子***40。
本发明中由数据分发子***20实现的数据分发流程如图4所示,主要包括以下步骤:
步骤401,根据接收的新数据生成序列文件。
数据分发子***20根据新数据中所包含的删除文档列表、新增文档列表和更新文档列表,生成序列文件,该序列文件中包括新数据中的各个文档ID和对应的文档状态。
步骤402,根据设定的磁盘更新周期判定是否需要重建磁盘索引,如果是,则执行步骤403;否则,执行步骤404。
数据分发子***20根据设定的磁盘更新周期,确定每次磁盘更新周期结束时刻为磁盘索引重建的时间点,如果到达该时间点时,判定需要重建磁盘索引,其他时间段则判定不需要重建磁盘索引。
步骤403,向磁盘索引子***40发送本次磁盘索引周期内接收的新数据和生成的序列文件,触发磁盘索引子***40进行磁盘索引重建,然后结束当前流程。
磁盘索引子***40根据序列文件获知需要进行哪些文档的增加、删除或更新操作,执行完相应文档的增加、删除和更新操作后,重建磁盘索引。
步骤404,向多级索引内存子***30发送新数据。
每当数据分发子***20中有新数据到来时,数据分发子***20将新数据转发给多级索引内存子***30,触发多级索引内存子***30进行内存索引重建。
本发明中的多级索引内存子***30还包括:数据传递模块31和索引重建模块32。数据传递模块31,用于将来自数据分发子***20的新数据由第一级索引逐级传递到其他各级索引,新数据逐级传递的具体过程前面已详细说明,此处不再赘述。索引重建模块32,与数据传递模块31相连,用于根据各级索引接收到的新数据,对各级索引进行重建。
另外,为了保证多级索引内存子***30中的各级索引在进行重建时,仍然能够为用户提供正常的信息搜索服务,本发明的各级索引都是由主索引和备索引组成,从而使得其中一个索引在进行重建时,还能选择另外一个索引为用户提供服务。基于此,本发明中的多级索引内存子***30还包括索引切换模块33,与索引重建模块32相连,用于在各级索引的主索引和备索引中的其中一个索引进行重建时,将服务切换到另一个索引,以保证服务的正常提供。
下面以主索引重建、备索引提供服务为例,对索引切换的流程进行详细阐述,如图5所示,主要包括以下步骤:
步骤501,接收到新数据时,由主索引进行索引重建,触发索引切换,将服务切换到备索引,由被索引提供服务。
例如:L1_Index由主索引a和备索引b组成,当L1_Index中有新数据来到时,主索引a进行重建,L1_Index上的所有服务都切换到备索引b,在主索引a重建期间,由备索引b提供服务。
步骤502,主索引重建完毕之后,确定备索引是否还在提供服务,如果是,则执行步骤503;否则,执行步骤504。
步骤503,等待备索引提供服务,并返回步骤502,直到确定备索引没有在提供服务。
步骤504,将重建后的主索引替换备索引,并由重建后的主索引或备索引提供服务。
仍以步骤501中的举例进行说明,主索引a重建后得到新的主索引a1,此时需要对备索引b也进行更新,以达到备索引和主索引的同步,因此,将新的主索引a1替换备索引b,成为新的备索引b1。
需要指出的是,本发明中采用多级索引的构架,由于在上级索引的数据量达到门限值时,才将新数据传递到下级索引,触发下级索引重建,因此,会存在上级索引进行文档删除或更新操作时,上级索引中的索引变化无法及时反应到下级索引的情况。上述情况会导致用户在进行搜索是,旧的文档或已删除的文档仍然被搜索出来。于是,本发明采用全局文档表对索引进行统一管理,如图6所示,在全局文档表中,将多级索引内存子***30的所有文档ID有序排列,每个文档ID对应一个文档位图,每个文档位图中包括n个比特位,每个比特位分别用来标识该文档是否存在于各级索引中。以3级索引为例,文档ID1对应的文档位图中存在3个比特位,第一个比特位对应L1_Index,第二个比特位对应L2_Index,第三个比特位对应L3_Index;第一个比特位置1时,表明文档ID1存在于L1_Index中,第一个比特位置0时,表明文档ID1不存在于L1_Index中。其他两个比特位的功能与第一个比特位类似,不再赘述。
由此可以看出,当文档在不同级别索引间传递时,需要把传递之前该文档所在的索引对应的比特位置0,并把传递之后该文档所在的索引对应的比特位置1。例如:在上述的3级索引中,文档ID1从L1_Index传递到L2_Index时,需要将文档ID1对应的文档位图的第一个比特位置0,并将第二个比特位置1。另外,如果文档ID1在3级索引中都存在,则文档ID1在L1_Index中被更新时,需要将文档ID1对应的文档位图的第二个比特位和第三个比特位置0,以表示L2_Index和L3_Index中的文档ID1为无效,从而避免了用户搜索时,将文档ID1更新前的旧文档搜索出来。当文档ID1被执行删除操作时,需要将全局文档表中的文档ID1及对应的文档位图清空。
由于多级索引内存子***30中对文档的增加、删除、更新操作非常频繁,因此,本发明采用循环文件的构架对多级索引内存子***30中的各个文档进行管理,可以通过循环文件的头指针和尾指针的移动,方便实现对文档的各种操作。下面结合图7进一步详细说明,图7中通过头指针(Head)和尾指针(Tail)指示出文档的有效范围,初始文档包括文档1、文档2、文档3、文档4、文档5和文档6;需要新增文档7时,只需将Tail向后移动一位,并相应的将文档7的内容按顺序***循环文件中即可;需要删除文档1、文档2和文档3时,无需物理上清除文档1、文档2和文档3,只需将Head向后移动三位,指向文档4即可;如果需要继续新增文档8和文档9,仍然按照顺序***文档,并相应移动Tail,当到达循环文件尾部时,则返回循环文件的头部继续***即可。另外,如果需要删除循环文件中的文档5,则不需要移动Head和Tail,通过图6中所示的全局文档表,将文档5对应的文档位图的各个比特位置0,以表示文档5状态为无效即可。
采用循环文件的构架,只需根据文档的删除、增加和更新需要移动Head和Tail即可实现文档的方便管理,相比现有技术中创建新文件并重新复制有效文档的操作,循环文件的管理方式不会消耗过多的文档管理时间。
在硬件方面,本发明的多级索引内存子***30中增设一个管理模块34,与数据传递模块31和索引重建模块32相连,用以通过循环文件对多级索引内存子***30中的文档进行管理,并通过全局文档表对多级索引内存子***30中的索引进行管理。
另外,本发明中还可以将磁盘索引子***40作为多级索引内存子***30的下一级索引,即多级索引内存子***30的最后一级索引的数据量达到设定的门限值时,将最后一级索引中的新数据传递给磁盘索引子***40,触发磁盘索引子***40进行磁盘索引重建,在传递结束后,将最后一级索引中已传递的新数据删除,以避免多级索引内存子***30和磁盘索引子***40中的数据出现重复。在这种实施方式下,不再需要设置磁盘索引更新周期,数据分发子***20也不需要定期向磁盘索引子***40发送新数据触发磁盘索引子***40进行磁盘索引重建,磁盘索引子***40只需要在有多级索引内存子***30中的新数据到来时,进行磁盘索引重建即可,从而简化了数据分发子***20的数据分发操作。
本发明通过多级索引内存子***30,实现多级索引分别进行索引重建,由于L1_Index的数据容量通常比较小,使得L1_Index的索引重建速度非常快,当有新数据到达多级索引内存子***30时,只需要很短的时间即可完成L1_Index的索引重建,也就只需要很短的时间就可以从L1_Index中搜索到该数据。对于知识搜索来说,用户提出的问题能够马上被搜索引擎搜索出来,从而加快了问题被解决的速度,提高了问题被解决的概率;对于新闻搜索,新闻快讯能够被快速搜索出来,充分满足用户对搜索时效性要求,增加了用户的使用体验。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。