专利名称:一种高可用分布式全文索引方法
技术领域:
本发明涉及信息索引和搜索领域,更具体而言,涉及一种针对海量文本数据构建分布式全文索引并且提供高可用的查询服务的方法。
背景技术:
随着互联网的发展,尤其是Web2. O的出现,文本信息量呈指数级速度增长。用户希望能够有效的管理海量文本数据,并对这些文本进行快速的搜索得到相应的信息。Google,百度,必应等搜索引擎的出现,满足了用户对于信息搜索的需求。而搜索引擎所采用的核心技术就是通过网络爬虫收集网络中的各类数据信息,对这些数据进行索弓丨,然后对外提供查询服务。由于随着数据信息的不断增长,所建立的索引文件规模大小也随之增长,导致单机服务器已经无法保存所有的索引文件。此外,建立单一巨大的索引文件 所耗费的时间以及在该索引文件上执行查询的时间也不断增加,导致无法满足海量客户查询需求。一个可行方案是将单个索引文件切分成多个索引分片,并将每一个索引分片分布存储在不同的主机上,最后对外提供索引服务。然而通过对业界所采取的若干方案研究,发现这些方案都存在以下几个突出的缺点
I、索引与查询服务是相关联的,即索引服务建立的本地索引文件直接为查询提供服务。然而,查询与索引集群的紧耦合导致二者不可分离,在容错性和系统复杂性上发生故障的可能性大大增加。2、常见的分布式索引系统采取索引分片或者索引复制的方法来增加分布式索引扩展性以及可用性。然而,它们所采用的分片策略通常是按照数据的属性来划分,因此产生固定数目的索引分片,而每一个索引分片的大小却急剧增大。此外,另一些分布式索引系统按固定大小划分索引,在查询过程中需要对所有的索引分片进行查询,增加查询的时间以及网络的开销。3、一般而言分布式索引系统都是为了满足特定的需求,不能支持动态对不同类别的数据进行索引操作。因此如果需要对新的索引域进行索引,需要停止分布式索引集群,重新部署索引任务,重启索引集群以重新建立相应的索引。4、当前的分布式索引系统采用多节点备份实现系统容灾。当索引集群的节点发生故障的,使用系统中其它节点的备份对其进行恢复,然而如果这些存在备份的节点同时发生故障,那么失效节点上的索引就无法正常恢复。通过以上的分析,可以知道当前的分布式索引系统中存在诸多问题。
发明内容
本发明的目的在于针对现有技术的不足,提供一种高可用分布式全文索引方法 本发明的目的是通过以下技术方案来实现的一种高可用分布式全文索引方法,该方
法包括以下步骤
(I)启动基础服务系统,包括分布式文件系统、分布式列式数据库以及元数据目录服务;所述分布式文件系统用于存储索引节点建立的索引文件,同时为查询集群中的节点提供索引文件;所述分布式列式数据库用于提供本发明中的操作日志服务,操作日志存储本发明执行的各项操作,此外,分布式列式数据库还用于存储原始全文数据文件,分布式列式数据库应支持按列存储数据;元数据目录服务实现元数据的存储; (2)在各个节点上启动索引集群服务和查询集群服务,其中,索引集群服务包括索引主节点服务和索引节点服务,查询集群服务包括查询主节点服务和查询节点服务;该步骤具体为首先,索引主节点和搜索主节点分别启动,进入安全模式,并分别扫描并监听元数据目录中索引节点和查询节点目录节点,以分别管理这些目录下的节点;其次,索引节点和查询节点启动,并将自身的信息注册到元数据节点目录之上,此时索引主节点和搜索主节点监听到消息,将新加入的节点纳入自身管理之中;最后,如果在安全模式下,节点不在发生变化,那么退出安全模式;至此完成了整个分布式全文索引系统启动的过程;
(3)在全文数据上创建索引、更新索引、删除索引;其中,创建索引包括增量式创建索引和批量式创建索引;该步骤通过以下子步骤来实现
(3. I)所述的增量式创建索引,需要用户在索引任务定义中将创建索引的模式设置为增量式模式;增量式创建索引的过程包括
(3. I. I)当数据插入到存储系统中,触发增量建立索引的任务,索引主节点通过反射机制实例化索引任务定义中的索引分片策略,判定该数据的索引归属于哪一个索引分片,此后从元数据目录中读取索引分片与索引节点的映射关系,找到负责建立该索引分片的索引节点;最后将节点ID写入到消息中;
(3. I. 2)索引主节点将3. I. I生成的消息通过远程调用的方式将该消息随机塞到任意一个索引节点的本地消息队列中;
(3. I. 3)索引节点读取对应的消息,如果该消息属于该节点,那么获取消息后的索引节点会根据消息中的数据主键从数据存储系统中读出数据,封装成索引单元,否则此消息不属于该节点,那么通过远程调用以及消息中的节点信息将该消息转发到对应索引节点;
(3. I. 3)索引节点处理该消息,如果不存在与该消息对应索引处理器,则创建索引处理器,并根据索引任务定义实例化索引器;索引器读入索引单元,根据索引任务中的预定义索引域,对存储于索引单元中的数据进行索引,同时在操作日志I中记录索引分片ID与操作消息,并且在操作日志2中记录数据主键与对应的索引子分片的名字;
(3. I. 4)如果此时满足索引子分片文件上传的条件且此时该索引处理器中合并线程不在运行,那么停止当前的索引子分片文件上的索引器,新建一个文件目录作为新的索引器的索引目录,转步骤3. I. 3 ;上传索引文件线程并执行步骤3. I. 5 ;否则依然将索引建在本地的索引子分片目录之下,转步骤3. I. 3 ;
(3. I. 5)将旧的索引子分片文件重新命名为合并文件,设置索引正在合并的标志,并且在合并文件目录上启动一个索引文件合并线程,将索引文件合并;上传索引文件线程将合并的结果上传到分布式文件系统中的索引子分片文件目录;并且将新增索引子分片的操作消息插入到元数据目录中的Master_queue上;
(3. I. 6)如果上传成功,那么就删除与该索引分片对应的索引操作日志1,否则跳转至步骤3. I. 5重复上传索引分片的过程;
(3. 2)更新索引的过程包括(3. 2. I)更新数据的操作触发更新索引的任务,索引主节点根据索引分片策略判定该数据归属于哪一个索引分片,并从元数据目录上读取索引分片与索引节点的映射关系,找到对应的索引节点;
(3. 2. 2)索引主节点通过远程调用将生成的更新索引消息传递给任意索引节点的本地消息队列,该索引节点从中读取对应的更新消息,如果该消息不属于当前节点,那么该节点根据消息中的节点信息将消息转发到真正的处理节点;
(3. 2. 3)获取更新消息后的索引节点会根据消息中的信息,根据数据ID在该索引分片的操作日志2中查找对应的索引子分片,将索引子分片ID写入消息中,如果此时索引子分片在本地磁盘上,转步骤3. 2. 4 ;否则转步骤3. 2. 5 ;
(3. 2. 4)根据该数据的文档主键,如果此时该数据的索引在本地的索引子分片之中,直接更新对应的索引;并在操作日志I中记录索引分片ID和对应的消息,转步骤3. 2. 2 ;
(3. 2. 5)判定当前更新缓存队列中的消息数目是否到达阈值,如果没有到达则将该消息存入该队列,返回步骤3. 2. 2 ;否则转步骤3. 2. 6 ;
(3. 2. 6)将更新缓存队列中的消息全部交给处理队列,启动更新线程,更新线程处理每一个消息,根据每一个数据主键和索引子分片的对应关系,生成索引子分片与索引主键的一对多映射关系,此后,从分布式文件系统中将索引子分片下载本地磁盘,在该分片上实例化出索引处理器以及对应的索引器,根据消息中的数据主键从分布式列式数据库中读取数据,封装成索引单元并执行更新索引操作,成功之后在操作日志I中记录该索引子分片执行的更新操作;
(3. 2. 7)当完成该索引子分片中所有更新操作,关闭在该目录上的索引器,并将更新目录中的索引文件上传至分布式索引子分片的目录;删除操作日志I中与该索引子分片相关的操作记录,同样的操作重复执行直至遍历完映射关系;
(3. 3)删除索引的过程包括
(3. 3. I)删除数据的操作触发删除索引的任务,索引主节点根据索引分片策略判定该数据归属于哪一个索引分片,并从元数据目录上读取索引分片与索引节点的映射关系,找到对应的索引节点;
(3. 3. 2)索引主节点通过远程调用将生成的删除索引消息传递给任意索引节点的本地消息队列,该索引节点从中读取对应的删除消息,如果该消息不属于当前节点,那么该节点根据消息中的节点信息将消息转发到真正的处理节点;
(3. 3. 3)获取删除消息后的索引节点会根据消息中的信息,根据数据ID在该索引分片的操作日志2中查找对应的索引子分片,将索引子分片ID写入消息中,如果此时索引子分片在本地磁盘上,转步骤3. 3. 4 ;否则转步骤3. 3. 5 ;
(3. 3. 4)根据该数据的文档主键,如果此时该数据的索引在本地的索引子分片之中,直接删除对应的索引;并在操作日志I中记录索引分片ID和对应的消息,转步骤3. 3. 2 ;
(3. 3. 5)判定当前删除缓存队列中的消息数目是否到达阈值,如果没有到达则将该消息存入该队列,返回步骤3. 3. 2 ;否则转步骤3. 3. 6 ;
(3. 3. 6)将删除缓存队列中的消息全部交给处理队列,启动删除线程,删除线程处理每一个消息,根据每一个数据主键和索引子分片的对应关系,生成索引子分片与索引主键的一对多映射关系,此后,从分布式文件系统中将索引子分片下载本地磁盘,在该分片上实例化出索引处理器以及对应的索引器,根据消息中的数据主键从分布式列式数据库中读取数据,封装成索引单元并执行删除索引操作,成功之后在操作日志I中记录该索引子分片执行的删除操作;
(3. 3. 7)当完成该索引子分片中所有删除操作,关闭在该目录上的索引器,并将删除目录中的索引文件上传至分布式索引子分片的目录;删除操作日志I中与该索引子分片相关的操作记录,同样的操作重复执行直至遍历完映射关系;
(3. 4)所述的批量式索引模式是当用户在索引任务定义中定义了批量式建立索引模式,此时,索引主节点将模式转换为批量式索引模式,批量式索引方法具体包含以下步骤(3. 4. I)调用MapReduce框架,在Map阶段调用索引分片策略,将数据划分为η个数据集合;然后将每个数据集合中的数据随机划分到若干个索引节点上;
(3. 4. 2)每个索引节点对划分的数据根据其所属的索引分片,分别建立索引子分片,每 一个索引子分片按照大小划分,当索引子分片大小超过阈值,则创建新的索引子分片;
(3. 4. 3)在Reduce阶段,每个索引节点将自身中索引子分片文件合并到的对应的索引分片文件,将会生成η个索引分片文件;
(3. 4. 4)当完成批量式建索引任务之后,索引主节点在元数据目录下的Master_queue下写入载入索引分片的操作;查询主节点根据此操作通过节点选择策略将索引分片分配给若干个查询节点,并且在元数据目录下的Node_qUeUe中写入载入索引分片的操作,各个对应的查询节点执行此操作,载入对应的索引;
(4)查询索引,包括以下子步骤
(4. I)查询客户端根据查询内容生成分布式查询,对该查询进行解析,产生对应的解析结果;
(4. 2)此后查询客户端利用步骤4. I中产生的结果,调用本地的查询节点选择策略;该策略会远程调用查询主节点上的索引分片选择策略,根据元数据目录保存的查询节点与索引分片的信息,决定该查询属于哪些索引分片,由于一个索引分片有多个索引子分片,因此根据元数据目录中索引子分片与查询节点的映射关系,利用负载均衡技术从这些节点中选择负载最轻的查询节点,生成与该查询相对应的查询节点列表;最后,将该列表返回给查询客户端;
(4. 3)查询客户端获取该查询节点列表,通过远程调用的方法,并行向这些查询节点发布查询请求;
(4. 4)查询节点执行该查询请求,通过一个线程池在不同的索引分片之上查询对应的结果,将结果返回给查询客户端;
(4. 5)客户端获取各个查询节点的查询结果之后,对查询结果进行合并操作,完成整个查询过程。本发明的有益效果是,首先,本发明分离查询与索引过程,使二者相互透明。优点在于索引集群可以同时支持增量式或批量式地建立索引。批量式索引可以满足短时间对大规模数据建立索引的需求。而增量式索引可以避免对已建立好的索引文件进行重建操作。另一方面,查询集群只需要从分布式文件系统中读取索引文件,而并不要求索引文件是如何建立的。其次,本发明将索引文件划分为三层结构,在索引分片的基础上再将其划分为索引子分片,以增强索引文件的扩展性。在查询集群中以索引子分片为单元,将索引子分片的拷贝复制到多个查询节点,提高索引文件的可用性。再次,本发明提供动态索引任务配置服务,通过设置索引任务中的参数,能够满足用户对不同数据建立索引的需求。最后,本发明记录了每一个操作的日志,当系统中节点发生故障,可以根据该日志对该节点中所有为备份的操作进行恢复。
图I是分布式全文索引系统的架构 图2是分布式全文索引系统的索引文件的组织结构 图3是索引文件在分布式全文索系统中的分布图; 图4是分布式全文索引系统的元数据目录结构 图5是分布式全文索引系统索引主节点启动流程 图6是分布式全文索引系统索引节点启动流程 图7是分布式全文索引系统查询主节点启动流程 图8是分布式全文索引系统查询节点启动流程 图9是分布式全文索引系统建立索引的流程 图10是分布式全文索引系统删除和更新索引的流程 图11是分布式全文索引系统执行查询的流程 图12是分布式全文索引系统批量式索引示意图。
具体实施例方式本发明的主要目的是提出建立一个分布式全文索引系统的方法。分布式全文索引系统对外提供海量文本索引和查询服务。下面参照附图对本发明进行全面详实的描述。如图I所示,通过本发明所使用的一个高可用分布式全文索引的方法可以构建一个分布式全文索引系统。一个完整的分布式全文索引方法应该由以下几个步骤构成
I、启动基础服务系统,包括分布式文件系统、分布式列式数据库以及元数据目录服务。分布式文件系统可以米用Hadoop的分布式文件系统HDFS,分布式数据库可以米用HBase,元数据目录服务可以采用Zookeeper来实现。上述的几个系统都可以采用与其功能相同的其他系统代替。I. I、所述分布式文件系统用于存储索引节点建立的索引文件,同时为查询集群中的查询节点提供索引文件。该分布式文件系统应该支持存储海量数据,且保证数据的安全性以及可用性,防止因系统故障导致数据缺失。I. 2、所述分布式列式数据库用于提供本发明中的操作日志服务,操作日志存储本发明所采用的方法中执行的各项操作。此外,分布式列式数据库还用于存储原始全文数据文件。分布式列式数据库应支持按列存储数据。所述的操作日志包括操作日志I与操作日志2。二者格式如下表所示
表I :操纵日志I
丨索引分片ID 丨消息I丨消息2丨…丨消息i丨…丨消H
表2 :操纵日志2
1¥主键I索引子分ifTF I. 2. I、所述的操作日志I用于系统容灾。其中“索引分片ID”表示索引分片名字。本发明将索引文件划分为三层结构,如图2所示。在图中,一个特定的索引文件是由特定数目的索引分片文件组成。具体而言,可以根据特定的索引分片策略来决定每个数据归属于哪一个索引分片之中。本发明默认提供了一些索引分片策略,例如根据数据属性来划分,包括按照时间,按照文档ID值取模等。用户也可以自定义特定的索引分片策略,以满足不同应用场景下对于数据划分的需求。每一个索引分片文件又可以根据用户设定的阈值划分成索引子分片。三级不同索引文件在系统中的分布如图3所示。所述的“消息i”中包含数据存储在分布式列式数据库中的主键ID以及操作类型。其中操作类型包括建立,更新以及删除索引操作。索引分片的ID或索引子分片ID
记录的是该数据归属于哪一个索引分片或子分片。消息格式如下表所示
权利要求
1. 一种高可用分布式全文索引方法,其特征在于,该方法包括以下步骤 (1)启动基础服务系统,包括分布式文件系统、分布式列式数据库以及元数据目录服务;所述分布式文件系统用于存储索引节点建立的索引文件,同时为查询集群中的节点提供索引文件;所述分布式列式数据库用于提供本发明中的操作日志服务,存储本发明执行的各项操作,此外,分布式列式数据库还用于存储原始全文数据文件,分布式列式数据库应支持按列存储,;元数据目录服务实现元数据的存储; (2)在各个节点上启动索引集群服务和查询集群服务,其中,索引集群服务包括索引主节点服务和索引节点服务,查询集群服务包括查询主节点服务和查询节点服务;该步骤具体为首先,索引主节点和搜索主节点分别启动,进入安全模式,并分别扫描并监听元数据目录中索引节点和查询节点目录节点,以分别管理这些目录下的节点;其次,索引节点和查询节点启动,并将自身的信息注册到元数据节点目录之上,此时索引主节点和搜索主节点监听到消息,将新加入的节点纳入自身管理之中;最后,如果在安全模式下,节点不在发生变化,那么退出安全模式;至此完成了整个分布式全文索引系统启动的过程; (3)在全文数据上创建索引、更新索引、删除索引;其中,创建索引包括增量式创建索引和批量式创建索引;该步骤通过以下子步骤来实现 (3. I)所述的增量式创建索引,需要用户在索引任务定义中将创建索引的模式设置为增量式模式;增量式创建索引的过程包括 (3. I. I)当数据插入到存储系统中,触发增量建立索引的任务,索引主节点通过反射机制实例化索引任务定义中的索引分片策略,判定该数据的索引归属于哪一个索引分片,此后从元数据目录中读取索引分片与索引节点的映射关系,找到负责建立该索引分片的索引节点;最后将节点ID写入到消息中; (3. I. 2)索引主节点将3. I. I生成的消息通过远程调用的方式将该消息随机塞到任意一个索引节点的本地消息队列中; (3. I. 3)索引节点读取对应的消息,如果该消息属于该节点,那么获取消息后的索引节点会根据消息中的数据主键从数据存储系统中读出数据,封装成索引单元,否则此消息不属于该节点,那么通过远程调用以及消息中的节点信息将该消息转发到对应索引节点; (3. I. 3)索引节点处理该消息,如果不存在与该消息对应索引处理器,则创建索引处理器,并根据索引任务定义实例化索引器;索引器读入索引单元,根据索引任务中的预定义索引域,对存储于索引单元中的数据进行索引,同时在操作日志I中记录索引分片ID与操作消息,并且在操作日志2中记录数据主键与对应的索引子分片的名字; (3. I. 4)如果此时满足索引子分片文件上传的条件且此时该索引处理器中合并线程不在运行,那么停止当前的索引子分片文件上的索引器,新建一个文件目录作为新的索引器的索引目录,转步骤3. I. 3 ;上传索引文件线程并执行步骤3. I. 5 ;否则依然将索引建在本地的索引子分片目录之下,转步骤3. I. 3 ; (3. I. 5)将旧的索引子分片文件重新命名为合并文件,设置索引正在合并的标志,并且在合并文件目录上启动一个索引文件合并线程,将索引文件合并;上传索引文件线程将合并的结果上传到分布式文件系统中的索引子分片文件目录;并且将新增索引子分片的操作消息插入到元数据目录中的Master_queue上; (3. I. 6)如果上传成功,那么就删除与该索引分片对应的索引操作日志1,否则跳转至步骤3. I. 5重复上传索引分片的过程; (3. 2)更新索引的过程包括 (3. 2. I)更新数据的操作触发更新索引的任务,索引主节点根据索引分片策略判定该数据归属于哪一个索引分片,并从元数据目录上读取索引分片与索引节点的映射关系,找到对应的索引节点; (3. 2. 2)索引主节点通过远程调用将生成的更新索引消息传递给任意索引节点的本地消息队列,该索引节点从中读取对应的更新消息,如果该消息不属于当前节点,那么该节点根据消息中的节点信息将消息转发到真正的处理节点; (3. 2. 3)获取更新消息后的索引节点会根据消息中的信息,根据数据ID在该索引分片的操作日志2中查找对应的索引子分片,将索引子分片ID写入消息中,如果此时索引子分片在本地磁盘上,转步骤3. 2. 4 ;否则转步骤3. 2. 5 ; (3. 2. 4)根据该数据的文档主键,如果此时该数据的索引在本地的索引子分片之中,直接更新对应的索引;并在操作日志I中记录索引分片ID和对应的消息,转步骤3. 2. 2 ; (3. 2. 5)判定当前更新缓存队列中的消息数目是否到达阈值,如果没有到达则将该消息存入该队列,返回步骤3. 2. 2 ;否则转步骤3. 2. 6 ; (3. 2. 6)将更新缓存队列中的消息全部交给处理队列,启动更新线程,更新线程处理每一个消息,根据每一个数据主键和索引子分片的对应关系,生成索引子分片与索引主键的一对多映射关系,此后,从分布式文件系统中将索引子分片下载本地磁盘,在该分片上实例化出索引处理器以及对应的索引器,根据消息中的数据主键从分布式列式数据库中读取数据,封装成索引单元并执行更新索引操作,成功之后在操作日志I中记录该索引子分片执行的更新操作; (3. 2. 7)当完成该索引子分片中所有更新操作,关闭在该目录上的索引器,并将更新目录中的索引文件上传至分布式索引子分片的目录;删除操作日志I中与该索引子分片相关的操作记录,同样的操作重复执行直至遍历完映射关系; (3. 3)删除索引的过程包括 (3. 3. I)删除数据的操作触发删除索引的任务,索引主节点根据索引分片策略判定该数据归属于哪一个索引分片,并从元数据目录上读取索引分片与索引节点的映射关系,找到对应的索引节点; (3. 3. 2)索引主节点通过远程调用将生成的删除索引消息传递给任意索引节点的本地消息队列,该索引节点从中读取对应的删除消息,如果该消息不属于当前节点,那么该节点根据消息中的节点信息将消息转发到真正的处理节点; (3. 3. 3)获取删除消息后的索引节点会根据消息中的信息,根据数据ID在该索引分片的操作日志2中查找对应的索引子分片,将索引子分片ID写入消息中,如果此时索引子分片在本地磁盘上,转步骤3. 3. 4 ;否则转步骤3. 3. 5 ; (3. 3. 4)根据该数据的文档主键,如果此时该数据的索引在本地的索引子分片之中,直接删除对应的索引;并在操作日志I中记录索引分片ID和对应的消息,转步骤3. 3. 2 ; (3. 3. 5)判定当前删除缓存队列中的消息数目是否到达阈值,如果没有到达则将该消息存入该队列,返回步骤3. 3. 2 ;否则转步骤3. 3. 6 ; (3. 3. 6)将删除缓存队列中的消息全部交给处理队列,启动删除线程,删除线程处理每一个消息,根据每一个数据主键和索引子分片的对应关系,生成索引子分片与索引主键的一对多映射关系,此后,从分布式文件系统中将索引子分片下载本地磁盘,在该分片上实例化出索引处理器以及对应的索引器,根据消息中的数据主键从分布式列式数据库中读取数据,封装成索引单元并执行删除索引操作,成功之后在操作日志I中记录该索引子分片执行的删除操作; (3. 3. 7)当完成该索引子分片中所有删除操作,关闭在该目录上的索引器,并将删除目录中的索引文件上传至分布式索引子分片的目录;删除操作日志I中与该索引子分片相关的操作记录,同样的操作重复执行直至遍历完映射关系; (3. 4)所述的批量式索引模式是当用户在索引任务定义中定义了批量式建立索引模式,此时,索引主节点将模式转换为批量式索引模式,批量式索引方法具体包含以下步骤(3. 4. I)调用MapReduce框架,在Map阶段调用索引分片策略,将数据划分为η个数据集合;然后将每个数据集合中的数据随机划分到若干个索引节点上; (3. 4. 2)每个索引节点对划分的数据根据其所属的索引分片,分别建立索引子分片,每一个索引子分片按照大小划分,当索引子分片大小超过阈值,则创建新的索引子分片; (3. 4. 3)在Reduce阶段,每个索引节点将自身中索引子分片文件合并到的对应的索引分片文件,将会生成η个索引分片文件; (3. 4. 4)当完成批量式建索引任务之后,索引主节点在元数据目录下的Master_queue下写入载入索引分片的操作;查询主节点根据此操作通过节点选择策略将索引分片分配给若干个查询节点,并且在元数据目录下的Node_qUeUe中写入载入索引分片的操作,各个对应的查询节点执行此操作,载入对应的索引; (4)查询索引,包括以下子步骤 (4. I)查询客户端根据查询内容生成分布式查询,对该查询进行解析,产生对应的解析结果; (4. 2)此后查询客户端利用步骤4. I中产生的结果,调用本地的查询节点选择策略;该策略会远程调用查询主节点上的索引分片选择策略,根据元数据目录保存的查询节点与索引分片的信息,决定该查询属于哪些索引分片,由于一个索引分片有多个索引子分片,因此根据元数据目录中索引子分片与查询节点的映射关系,利用负载均衡技术从这些节点中选择负载最轻的查询节点,生成与该查询相对应的查询节点列表;最后,将该列表返回给查询客户端; (4. 3)查询客户端获取该查询节点列表,通过远程调用的方法,并行向这些查询节点发布查询请求; (4. 4)查询节点执行该查询请求,通过一个线程池在不同的索引分片之上查询对应的结果,将结果返回给查询客户端; (4. 5)客户端获取各个查询节点的查询结果之后,对查询结果进行合并操作,完成整个查询过程。
全文摘要
本发明公开了一种高可用分布式全文索引方法,该方法首先启动基础服务系统,然后在各个节点上启动索引集群服务和查询集群服务,再在全文数据上创建、更新和删除索引,最后查询索引;本发明分离查询与索引过程,可以同时支持增量或批量式地建立已有的索引,批量式索引在短时间对大规模数据建立索引,而增量式索引避免重建索引。本发明将索引文件划分为三层结构,包括索引文件、索引分片、索引子分片,以增强索引文件的扩展性和可用性;本发明提供动态索引任务配置服务,通过设置索引任务中的参数,能够动态地满足用户对不同数据建立索引的需求。
文档编号G06F17/30GK102779185SQ20121022635
公开日2012年11月14日 申请日期2012年6月29日 优先权日2012年6月29日
发明者余斌, 陈岭, 鲁伟明 申请人:浙江大学