重建索引方法及装置与流程

文档序号:11134106阅读:321来源:国知局
重建索引方法及装置与制造工艺
本申请涉及通信
技术领域
,尤其涉及一种重建索引方法及装置。
背景技术
:ElasticSearch是一个基于Lucene的搜索服务器。该搜索服务器包含多个索引库,客户端首先将原始数据和索引结构写入索引库中,然后搜索服务器根据该索引结构对原始数据建立索引,得到索引数据。但当索引结构发生变化时,老的索引数据并不能满足用户的需求,搜索服务器需要对索引库的原始数据重建索引,以得到新的索引数据。在现有技术中,搜索服务器先为该老的索引库重建一个新的索引库,通过客户端读取该老的索引库中的原始数据,并将读取出来的原始数据和新的索引结构写入新的索引库中,然后根据新的索引结构对该原始数据重建索引,得到新的索引数据,并通过修改索引别名方式从该老的索引库切换到新的索引库,并删除该老的索引库。然而,由于客户端在读取和写入原始数据的过程中,都需要通过网络传输,网络资源消耗比较大,导致重建索引效率低。技术实现要素:有鉴于此,本申请提供一种重建索引方法及装置,以解决现有的重建方式重建索引效率低的问题。根据本申请实施例的第一方面,提供一种重建索引方法,所述方法包括:接收携带新的索引结构的重建索引请求,确定所述重建索引请求对应的主分片,并为所述主分片创建副本分片;将所述主分片中记录的原始数据复制到所述副本分片上,并按照所述新的索引结构对所述原始数据建立索引,得到新的索引数据;删除所述主分片,并将所述副本分片切换为主分片。根据本申请实施例的第二方面,提供一种重建索引装置,所述装置包括:接收单元,用于接收携带新的索引结构的重建索引请求;创建单元,用于确定所述重建索引请求对应的主分片,并为所述主分片创建副本分片;同步单元,用于将所述主分片中记录的原始数据复制到所述副本分片上;建立索引单元,用于按照所述新的索引结构对所述原始数据建立索引,得到新的索引数据;切换单元,用于删除所述主分片,并将所述副本分片切换为主分片。应用本申请实施例,搜索服务器在接收到携带新的索引结构的重建索引请求时,确定该重建索引请求对应的主分片,并为该主分片创建副本分片;将该主分片中记录的原始数据复制到副本分片上,并按照新的索引结构对该原始数据建立索引,得到新的索引数据;删除该主分片,并将副本分片切换为主分片。基于上述实现方式,搜索服务器通过将主分片的原始数据同步到对应的副本分片中,以对原始数据重建索引,而不需要外部客户端通过查询请求和写入请求,读取并写入原始数据的过程,从而减少了网络资源的消耗。附图说明图1为本申请根据一示例性实施例示出的一种示例性的现有重建索引结构图;图2A为本申请根据一示例性实施例示出的一种重建索引方法的实施例流程图;图2B为图2A所示实施例中的一种示例性的主分片和副本分片分布图;图2C为图2A所示实施例中的一种示例性的主分片同步数据过程图;图3为本申请根据一示例性实施例示出的一种搜索服务器的硬件结构图;图4为本申请根据一示例性实施例示出的一种重建索引装置的实施例结构图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。图1为本申请根据一示例性实施例示出的一种示例性的现有重建索引结构图,如图1所示,搜索服务器包含有三个搜索节点node1、node2以及node3,老的索引库A包含A1、A2以及A3三个主分片,重建的一个新的索引库A′对应创建了A′1、A′2以及A′3三个主分片。客户端先向搜索服务器发送携带有索引库A标识的查询请求,搜索服务器从索引库A选择一个搜索节点,例如node1,将该查询请求发送到node1,node1将查询请求分别转发到A2所在的搜索节点node2和A3所在的搜索节点node3上,node2和node3分别将A2记录的原始数据2和A3记录的原始数据3发送到node1上,node1将A1记录的原始数据1、原始数据2以及原始数据3进行汇总,并返回给客户端;然后客户端将携带原始数据1、原始数据2、原始数据3以及新的索引结构的写入请求发送到搜索服务器,搜索服务器将原始数据1、原始数据2、原始数据3以及新的索引结构发送到node1,node1复制两份新的索引结构,并将原始数据1和一份新的索引结构存储到A′1中,并将原始数据2和一份新的索引结构发送到node2,node2将原始数据2和一份新的索引结构存储到A′2中,并将原始数据3和一份新的索引结构发送到node3,node3将原始数据3和一份新的索引结构存储到A′3中,各个搜索节点均按照新的索引结构在各主分片上建立索引,在node1接收到node2和node3返回的写入成功响应时,将写入成功响应返回给客户端;最后客户端以修改索引别名方式控制搜索服务器将索引库A切换到索引库A′,并删除索引库A。由此可知,现有重建索引的过程需要外部客户端协助完成,外部客户端需要先将原始数据读取出来,然后再将原始数据和新的索引结构写入新的索引库中,这样势必会消耗大量的网络资源传输数据,并且查询请求和写入请求均是在同一个搜索节点上进行操作,并由该搜索节点将原始数据和新的索引结构再转发到其他搜索节点,操作效率低。图2A为本申请根据一示例性实施例示出的一种重建索引方法的实施例流程图,该实施例应用在搜索服务器上,在本申请实施例中,搜索服务器为分布式服务器,包含多个搜索节点,并且该搜索服务器包含索引库,该索引库包含多个主分片,每个主分片可能分布在不同的搜索节点上,也可能分布在相同的搜索节点上,并且每个主分片对应有索引结构,且记录有原始数据和索引数据,如图2A所示,该实施例包括以下步骤:步骤201:接收携带有新的索引结构的重建索引请求,确定该重建索引请求对应的主分片,并为该主分片创建副本分片。在索引结构发生变化时,搜索服务器中原有的索引数据便无法满足用户的使用需求,需要搜索服务器重新建立索引数据,本申请通过外部客户端向搜索服务器发送重建索引请求,以触发搜索服务器的重建索引流程,并且外部客户端发送的重建索引请求中可以携带新的索引结构,以利用该新的索引结构重建索引。针对确定该重建索引请求对应的主分片,并为该主分片创建副本分片的过程,该重建索引请求中还可以携带索引库标识,搜索服务器可以先获取该索引库标识对应的索引库,将该索引库中的所有主分片确定为重建索引请求对应的主分片,然后再为该索引库中的每个主分片创建对应的副本分片。其中,搜索服务器中包含有多个索引库,每个索引库中存储有不同类型的数据,通过索引库标识可以区分不同的索引库,因此重建索引请求中需要携带有索引库标识,以指示需要重建索引的索引库,该索引库标识也可以称为索引别名。此外,索引库中包含有多个主分片,每个主分片存储着索引库的一部分数据,且这些数据可以平均分布在每个主分片上,因此,需要将该索引库中的所有主分片作为需要重建索引的对象,即将该索引库中的所有主分片确定为重建索引请求对应的主分片。针对为该主分片创建副本分片的过程,在一个例子中,搜索服务器可以在该主分片所在的搜索节点上,为该主分片创建对应的副本分片。其中,由于搜索服务器包含多个搜索节点,索引库中的每个主分片可能分布在不同的搜索节点上,也可能分布在相同的搜索节点上,通常索引库中的主分片以负载均衡方式分布在搜索节点上,例如,搜索服务器有3个搜索节点,索引库包含3个主分片,那么3个主分片分别分布在不同的搜索节点上,因此,为了减少搜索节点之间通信消耗,搜索服务器可以在主分片所在的搜索节点上,为该主分片创建对应的副本分片,并且每个主分片在不同的搜索节点上,可以同时创建对应的副本分片,提高了重建索引的效率。下面以一个例子进行说明。图2B为图2A所示实施例中的一种示例性的主分片和副本分片分布图,如图2B所示,索引库包含3个主分片A0、A1、A2,每个主分片均位于不同的搜索节点上,A0在搜索节点node1上,A1在搜索节点node2上,A2在搜索节点node3上,搜索服务器为3个主分片创建的副本分片均在每个主分片所在的搜索节点上,分别为A0'、A1'、A2'。基于该例子的描述可知,搜索服务器在通过索引库标识获取到对应的索引库之后,为该索引库的每个主分片创建的副本分片,是在每个主分片所在搜索节点上创建的副本分片,在后续步骤中,不需要消耗搜索节点之间的通信资源便可实现主分片与副本分片的交互,从而可以减少搜索节点之间的通信消耗,此外,在不同的搜索节点上可以同时为主分片创建对应的副本分片,提高了重建索引的效率。在另一个例子中,搜索服务器也可以在该主分片所在的搜索节点之外的其它搜索节点上,为该主分片创建对应的副本分片。步骤202:将该主分片中记录的原始数据复制到副本分片上,并按照新的索引结构对该原始数据建立索引,得到新的索引数据。具体地,搜索服务器在每个搜索节点上,将该索引库包含的主分片的原始数据同步到对应的副本分片中,并在副本分片中按照新的索引结构对该原始数据建立索引,得到新的索引数据。需要说明的是,搜索服务器在为主分片创建副本分片之后,可以为该副本分片创建一个重建索引标识,以与现有的副本分片进行区分。搜索服务器在需要将所述主分片中记录的原始数据复制到副本分片上时,可以判断该副本分片是否有重建索引标识;如果有,则将该主分片记录的原始数据复制到副本分片上,如果没有,则将该主分片记录的原始数据和索引数据一起复制到副本分片上。其中,重建索引标识用于标记该副本分片的类型,主分片在同步数据时,如果副本分片有重建索引标识,表示该副本分片是用来重建索引的,只复制主分片中的原始数据,以利用新的索引结构重新建立索引,得到新的索引数据;如果没有重建索引标识,表示该副本分片为现有的副本分片,需要将主分片中的原始数据和索引数据均复制到副本分片中。如步骤201所述,图2C为图2A所示实施例中的一种示例性的主分片同步数据过程图,结合图2B与图2C所示,主分片A0在同步数据时,由于对应的副本分片A0'有重建索引标识,因此,只需要将A0上的原始数据1复制到A0'中,对于A1同步数据到A1'和A2同步数据到A2'的过程类似,不再赘述。针对按照新的索引结构对该原始数据建立索引,得到新的索引数据的过程,新的索引结构可以包括字段、该字段对应的类型和分词方式,原始数据包括多条子原始数据,针对每条子原始数据,搜索服务器可以从该条子原始数据中获取该字段对应的数据内容,并设置为该字段对应的类型,然后再根据该字段对应的分词方式对应的词库,对该数据内容进行分词处理,得到分词结果;将所有子原始数据得到的分词结果进行汇总,并将汇总结果存储到该字段对应的索引数据表中,该汇总结果包括的是数据内容在词库中出现的词汇,以及每个词汇对应的所有子原始数据的标识。其中,新的索引结构中可以包括多个字段,且每个字段对应有分词方式和类型,例如,分词方式包括有中文分词方式、英文分词方式、拼音分词方式等,字段对应的类型包括有字符类型、日期类型、数值类型等。每个分词方式对应有词库,例如,中文分词方式对应的中文词库、英文分词方式对应的英文词库等。原始数据由多条子原始数据组成,且每条子原始数据对应有标识。下面以一个例子进行说明。例如,副本分片中存储的原始数据为两篇文档,一篇文档的标识为000001,另一篇文档的标识为000002,每条子原始数据对应一篇文档,因此其中一条子原始数据的标识可以为000001,另一条子原始数据的标识可以为000002,该原始数据对应的字段包含有Filename、Title、Body、Author,其中,标识为000001的子原始数据具体为:{Filename:“专利写作.doc”;Title:“专利写作的关键注意事项”;Body:“专利写作过程中有多个注意事项,后面省略。”;Author:“张强”;}标识为000002的子原始数据具体为:{Filename:“测试数据.doc”;Title:“专利保护”;Body:“要注意保护公司的知识产权”;Author:“李广”;}以字段title为例,对字段title对应的数据内容进行分词处理,标识为000001的子原始数据得到的分词结果为“专利”、“写作”、“的”、“关键”、“注意”、“事项”;标识为000002的子原始数据得到的分词结果为“专利”、“保护”,进行汇总之后,得到的汇总结果,并将汇总结果存储到字段title的索引数据表中,如表1为一种示例性的字段title的索引数据表,如表1所示,汇总之后的分词结果为“专利”、“写作”、“的”、“关键”、“注意”、“事项”、“保护”,每个分词对应的文档列表为:“专利”对应的文档为000001、000002;“写作”对应的文档为000001;“的”对应的文档为000001;“关键”对应的文档为000001;“注意”对应的文档为000001;“事项”对应的文档为000001;“保护”对应的文档为000002。分词结果分词对应的文档列表专利000001、000002写作000001的000001关键000001注意000001事项000001保护000002表1需要说明的是,如果词库也有更新,则搜索服务器在按照新的索引结构对该原始数据建立索引之前,可以先将新的词库导入到每个搜索节点中,以用于重建索引。基于步骤202的描述可知,搜索服务器通过在副本分片上设置重建索引标识,以与现有的副本分片进行区分,从而在同步数据时,可以只将主分片中的原始数据复制到携带有重建索引标识的副本分片上,并且每个搜索节点上同步数据的过程可以同时进行,而不需要客户端通过查询请求和写入请求实现将原始数据发送到新的索引库中,减少了网络资源的消耗。并且每个搜索节点可以同时进行操作,即每个主分片和副本分片可以同时进行同步数据的过程,从而减少了搜索节点之间的通信消耗,提高了重建索引效率。步骤203:删除该主分片,并将该副本分片切换为主分片。具体地,搜索服务器在每个搜索节点上将该索引库的主分片删除,并将携带有重建索引标识的副本分片切换为主分片,从而完成该索引库的重建索引流程。需要说明的是,搜索服务器在执行步骤201之后,并在执行步骤202之前,可以将该副本分片的状态标识设置为第一标识,在执行步骤202之后,将该副本分片的状态标识设置为第二标识。从而,在接收到搜索请求时,搜索服务器可以查询该副本分片的状态标识;若该状态标识为第一标识,则从副本分片对应的主分片获取该搜索请求对应的索引数据;若该状态标识为第二标识,则从副本分片上获取该搜索请求对应的索引数据。其中,该搜索请求中携带有该索引库标识和要搜索的内容,搜索服务器在该索引库标识对应的索引库中,查询到该副本分片的状态标识为第一标识时,表示该副本分片是不可用的,可以从该副本分片对应的主分片中查询该要搜索的内容对应的索引数据。由上述实施例可知,搜索服务器在接收到携带新的索引结构的重建索引请求时,确定该重建索引请求对应的主分片,并为该主分片创建副本分片;将该主分片中记录的原始数据复制到副本分片上,并按照新的索引结构对该原始数据建立索引,得到新的索引数据;删除该主分片,并将副本分片切换为主分片。基于上述实现方式,搜索服务器通过将主分片的原始数据同步到对应的副本分片中,以对原始数据重建索引,而不需要外部客户端通过查询请求和写入请求,读取并写入原始数据的过程,从而减少了网络资源的消耗。与前述重建索引方法的实施例相对应,本申请还提供了重建索引装置的实施例。本申请重建索引装置的实施例可以应用在搜索服务器上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本申请根据一示例性的实施例示出的一种搜索服务器的硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常根据该设备的实际功能,还可以包括其他硬件,对此不再赘述。图4为本申请根据一示例性实施例示出的一种重建索引装置的实施例结构图,该实施例应用在搜索服务器上,所述搜索服务器包含主分片,所述主分片对应有索引结构,且记录有原始数据和索引数据,如图4所示,所述装置包括:接收单元410、创建单元420、同步单元430、建立索引单元440、切换单元450。其中,接收单元410,用于接收携带新的索引结构的重建索引请求;创建单元420,用于确定所述重建索引请求对应的主分片,并为所述主分片创建副本分片;同步单元430,用于将所述主分片中记录的原始数据复制到所述副本分片上;建立索引单元440,用于按照所述新的索引结构对所述原始数据建立索引,得到新的索引数据;切换单元450,用于删除所述主分片,并将所述副本分片切换为主分片。在一个可选的实现方式中,所述搜索服务器包含索引库,所述索引库包含多个主分片,所述重建索引请求中还携带有索引库标识,所述创建单元420,具体用于获取所述索引库标识对应的索引库,将所述索引库中的所有主分片确定为所述重建索引请求对应的主分片;为所述索引库中的每个主分片创建对应的副本分片。在另一个可选的实现方式中,所述搜索服务器包含多个搜索节点,所述主分片位于一个搜索节点上,所述创建单元420,还具体用于在为所述主分片创建副本分片的过程中,在所述主分片所在的搜索节点上,为所述主分片创建对应的副本分片;或者,在所述主分片所在的搜索节点之外的其它搜索节点上,为所述主分片创建对应的副本分片。在另一个可选的实现方式中,所述装置还包括(图4中未示出):搜索查询单元,具体用于在所述创建单元420为所述主分片创建副本分片之后,在所述建立索引单元440按照所述新的索引结构对所述原始数据建立索引之前,将所述副本分片的状态标识设置为第一标识;在所述建立索引单元440按照所述新的索引结构对所述原始数据建立索引之后,将所述副本分片的状态标识设置为第二标识;在接收到搜索请求时,查询所述副本分片的状态标识;若所述状态标识为第一标识,则从所述副本分片对应的主分片获取所述搜索请求对应的索引数据;若所述状态标识为第二标识,则从所述副本分片上获取所述搜索请求对应的索引数据。在另一个可选的实现方式中,所述装置还包括(图4中未示出):重建索引标识单元,具体用于在所述创建单元420为所述主分片创建副本分片之后,为所述副本分片创建一个重建索引标识;在需要将所述主分片中记录的原始数据复制到副本分片上时,判断所述副本分片是否有重建索引标识;如果有,则将所述主分片记录的原始数据复制到所述副本分片上;如果没有,则将所述主分片记录的原始数据和索引数据复制到所述副本分片上。上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。由上述实施例可知,搜索服务器在接收到携带新的索引结构的重建索引请求时,确定该重建索引请求对应的主分片,并为该主分片创建副本分片;将该主分片中记录的原始数据复制到副本分片上,并按照新的索引结构对该原始数据建立索引,得到新的索引数据;删除该主分片,并将副本分片切换为主分片。基于上述实现方式,搜索服务器通过将主分片的原始数据同步到对应的副本分片中,以对原始数据重建索引,而不需要外部客户端通过查询请求和写入请求,读取并写入原始数据的过程,从而减少了网络资源的消耗。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1