发明内容
本发明的目的在于提供一种分布式索引文件的检索方法,以克服现有技术中检索服务器的响应速度慢,服务器之间的通信量大,耗费内存资源导致检索的整体并发能力和检索速度低的问题。
本发明的目的在于提供一种分布式索引文件的检索***,以克服现有技术中的检索服务器集群整体并发能力和检索速度低的问题。
本发明的又一目的在于提供一种分布式索引文件的检索服务器,以克服现有检索服务器检索速度低的问题。
为解决上述技术问题,本发明提供如下技术方案:
一种分布式索引文件的检索方法,包括:
对获取的检索串进行解析后生成由关键词组成的检索表达式;
将所述关键词的检索请求及该关键词的倒排表项的预读请求发送至集群中的各个检索服务器;
集群中的检索服务器按照所述关键词命中文档的频率高低读取所述关键词的倒排表项;
集群中的检索服务器对所述关键词的倒排表项进行逻辑操作后输出检索结果。
所述关键词按照命中文档的频率高低分为由超高频关键词和中高频关键词组成的高频关键词以及低频关键词。
所述倒排表项包括:包含所述关键词的文档标识、所述关键词在所述文档中的权值、及所述关键词在所述文档中的位置偏移。
所述方法进一步包括:所述检索服务器将所述关键词倒排表项中的八字节的文档标识压缩为四字节的文档篇号。
所述关键词为超高频关键词和/或中高频关键词,所述集群中的检索服务器读取所述关键词的倒排表项具体为:
将所述关键词的倒排表项进行分割,集群中的每个检索服务器读取所述分割后的关键词的一部分倒排表项。
所述集群中包含N台检索服务器,N为整数;
所述分割具体为:对所述高频关键词的倒排表项中的文档篇号进行取模,将相同模值的倒排表项作为一组,所述取模参数为N。
所述关键词为低频关键词,所述集群中的检索服务器读取所述关键词的倒排表项具体为:集群中的某一检索服务器读取所述关键词的全部倒排表项。
所述集群中的检索服务器对所述关键词的倒排表项进行逻辑操作后输出检索结果包括:
将所述某一检索服务器中低频关键词的倒排表项的文档篇号进行取模后发送到对应的检索服务器;
所述集群中的每个检索服务器对所述高频关键词和低频关键词的倒排表项进行逻辑操作;
对所述每个检索服务器的逻辑操作结果进行汇总后得到所述检索串的检索结果。
一种分布式索引文件的检索***,包括:
缓存代理服务器,用于对获取的检索串进行解析后生成由关键词组成的检索表达式;
集群代理服务器,用于将所述关键词的检索请求及该关键词的倒排表项的预读请求发送至集群中的各个检索服务器;
检索服务器,用于按照所述关键词命中文档的频率高低读取所述关键词的倒排表项,并对所述关键词的倒排表项进行逻辑操作后输出检索结果。
一种分布式索引文件的检索服务器,包括:
检索解释模块,用于对获取的检索串进行解析后生成由关键词组成的检索表达式供上层服务器调用;
读取管理模块,用于接收所述关键词的检索请求及该关键词的倒排表项的预读请求;
关键词读取模块,用于按照所述关键词命中文档的频率高低读取高频关键词的一部分倒排表项,和/或低频关键词的全部倒排表项;
逻辑运算模块,用于对所述高频关键词的倒排表项和低频关键词的倒排表项进行逻辑操作后输出检索结果。
所述检索服务器进一步包括:
标识转换模块,用于将所述关键词倒排表项中的八字节的文档标识压缩为四字节的文档篇号。
由以上本发明提供的技术方案可见,本发明的分布式索引文件的检索方法,通过对获取的检索串进行解析后生成由关键词组成的检索表达式,将关键词的检索请求及该关键词的倒排表项的预读请求发送至集群中的各个检索服务器,集群中的检索服务器按照关键词命中文档的频率高低读取关键词的倒排表项,集群中的检索服务器对关键词的倒排表项进行逻辑操作后输出检索结果。本发明由于让集群中的多台服务器分摊高频关键词的倒排表项,对分摊的倒排表项进行并行读取,因此在***设计时间内完成了超大倒排表项的读取而不延误单次逻辑操作的时间开销;并且对于低频关键词的倒排表项,将原来需要在多台检索服务器上读取转换为在一台检索服务器上读取,节省了集群中多台检索服务器的资源。
应用本发明可以有效提高检索集群内部检索服务器之间的耦合度,并且增加了服务器之间的资源动态调配能力。通过把集群内的多台检索服务器的内存资源,磁盘输入输出资源以及CPU(中央处理器)资源看成整体进行统一规划,最大限度保证了集群整体的并发能力,使得检索速度得到极大的提高。
具体实施方式
本发明的核心在于提供一种分布式索引文件的检索方法,该方法对获取的检索串进行解析后生成由关键词组成的检索表达式,将关键词的检索请求及该关键词的倒排表项的预读请求发送至集群中的各个检索服务器,集群中的检索服务器按照关键词命中文档的频率高低读取这些关键词的倒排表项,集群中的检索服务器对这些关键词的倒排表项进行逻辑操作后输出检索结果。
为了使本技术领域的人员更好地理解本发明方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明方法的第一实施例流程如图3所示:
步骤301:对获取的检索串进行解析后生成由关键词组成的检索表达式。
步骤302:将关键词的检索请求及该关键词的倒排表项的预读请求发送至集群中的各个检索服务器。
其中,倒排表项是记录了某个关键词命中的所有文档篇号的数组,包括包含该关键词的文档标识、该关键词在该文档中的权值、及该关键词在该文档中的位置偏移,基本结构如下所示:
<d1,wd1,t,loc1,loc2,…locfd1,t><d2….>…<dft…>
其中,t表示检索串中的某个关键词,di表示包含该关键词t的一系列文档的标识,Wd,t表示关键词t在文档di中的权值,loci表示关键词t在当前文档中出现的位置偏移,通常用两字节表示。通过这种倒排表项的结构,就可以快速查找检索串中的某个关键词。通常每个检索串的倒排索引文件由N个倒排表项组成,N的数量即为检索串中关键词的数量之和。
步骤303:集群中的检索服务器按照关键词命中文档的频率高低读取关键词的倒排表项。
具体的,检索表达式中的关键词按照频率高低分为由超高频关键词和中高频关键词组成的高频关键词以及低频关键词。当关键词为超高频关键词和/或中高频关键词时,集群中的检索服务器读取关键词的倒排表项具体为将该关键词的倒排表项进行分割,集群中的每个检索服务器读取超高频和/或中高频关键词的一部分倒排表项;当关键词为低频关键词时,集群中的检索服务器读取关键词的倒排表项具体为集群中的某一台检索服务器读取低频关键词的全部倒排表项。
其中,集群中包含N(N为整数)台检索服务器时,对高频关键词的倒排表项中的文档标识进行取模,取模参数为N,将具有相同模值的倒排表项作为一组分配给与该模值对应的检索服务器。
进一步地,检索服务器将关键词倒排表项中的八字节的文档标识压缩为四字节的文档篇号。
步骤304:集群中的检索服务器对关键词的倒排表项进行逻辑操作后输出检索结果。
具体的,将某一检索服务器中低频关键词的倒排表项的文档标识进行取模后发送到对应的检索服务器;集群中的每个检索服务器对高频关键词和低频关键词的倒排表项进行逻辑操作;对每个检索服务器的逻辑操作结果进行汇总后得到检索串的检索结果。
其中,逻辑操作可以为与操作、或操作、非操作中的一种。
本发明方法的第二实施例流程图如图4所示,该实施例示出的每个集群中包含N台检索服务器,其中N为整数:
步骤401:对获取的检索串进行解析后生成由关键词组成的检索表达式。
通常用户输入的需要进行检索的检索串可以是一个短句或者若干关键词,这些检索串都是未经计算机格式化处理的原始字符串,该检索串经过解析处理后成为计算机可以识别的检索表达式,该检索表达式可以包含一个或多个关键词,中间用空格隔开,一般关键词之间的空格表示前后的关键词进行“与”检索操作,而在互联网搜索中最常见的搜索操作也是“与”操作。
步骤402:将关键词的检索请求及该关键词的倒排表项的预读请求发送至集群中的各个检索服务器。
其中,倒排表项是记录了某个关键词命中的所有文档篇号的数组,包括包含该关键词的文档标识、该关键词在该文档中的权值、及该关键词在该文档中的位置偏移,所有关键词对应的倒排表项的集合即为到排表文件。
步骤403:判断关键词为高频关键词或为低频关键词,若为高频关键词则执行步骤404;若为低频关键词则执行步骤405。
通过对网页搜索的后台日志文件的统计,大约超过百分之六十的检索需要进行“与”操作,因此有效提高对“与”操作的检索效率能够提高***的整体性能。对“与”操作来说,关键在于参与“与”操作的检索表达式中个别高频(命中互联网中巨大数量的网页文档)关键词的倒排表项的读取速度,对于低频关键词的倒排表项读取,由于其本身倒排表项的数据块尺寸较小,因此不占用较多的资源。因此根据关键词对应的倒排表项数量的不同,特别将检索表达式中的关键词分为高频关键词和低频关键词,特别的,高频关键词还可以进一步分为中高频关键词和超高频关键词。
步骤404:集群中N台检索服务器分别读取高频关键词的一部分倒排表项,执行步骤407。
对于高频关键词的倒排表项的读取,采用了类似磁盘RAID(冗余独立磁盘阵列)***的技术,让集群中的多个检索服务器分摊超大规模的高频关键词的倒排表项,同时进行多个检索服务器的并行读取,这样在***设计时间内可以完成对超大倒排表项的读取,同时也不会延误单次“与”检索操作的总时间开销。
步骤405:集群中的某一检索服务器读取低频关键词的全部倒排表项。
对于低频关键词的倒排表项的读取,把原来需要在多台检索服务器上分摊读取的少量倒排表项转换为在集群中的某一台检索服务器上一次读取完成。通常低频关键词的倒排表项的数据块小于64K,如果把它切分成N块再由N台服务器去读取,则不但不会提高读取的速度,而且浪费了集群中多个检索服务器的资源,这是因为对于小于64K的数据块,磁盘在读取时耗费的时间是一样的。
步骤406:将低频关键词的倒排表项的文档篇号取模后发送到对应的检索服务器。
检索服务器将关键词倒排表项中的八个字节的文档标识压缩为四个字节的文档篇号。倒排表项中的文档标识是用于定位文档的,对于互联网上的网页来说,每个网页都有一个唯一的URL(统一资源***),我们可以根据网页的URL字符串对其进行签名算法的处理后,得到该URL字符串对应的一个64bit(8个字节)的全局唯一整数,就是该文档对应的文档标识。但是由于该互联网中的网页数量巨大,因此该文档标识占用的存储空间也很大,在进行检索过程中,当将关键词的倒排表项分摊到N台检索服务器上时,也就相当于将不同的文档均分到了不同的检索服务器上,因此每台检索服务器上得到了一定数量的文档,假设该数量为n(n为整数),则该检索服务器会对分配到本机的文档进行进一步编号,将这些文档标识为从0-n-1的整数,即为该文档的文档篇号,对于同一文档,文档篇号的长度远远小于原来文档标识的长度,节约了存储空间也相应提高了读取速度。
步骤407:集群中的N台检索服务器对高频关键词和低频关键词的倒排表项进行逻辑操作。
其中,逻辑操作包括与操作、或操作、非操作中的一种。
步骤408:对N台检索服务器的逻辑操作结果进行汇总后得到检索串的检索结果。
下面以对高频关键词“中国”和低频关键词“徐建军”进行“与”操作为例,详细说明对检索串“中国徐建军”进行检索的过程,“中国”是一个在文档中出现频率非常高的高频关键词,而“徐建军”作为一个具体的人名,在他为非名人的情况下,是一个在文档中出现频率很低的低频关键词。对该检索串进行检索的示意图如图5所示:
从图5中可知,该集群中包含三台检索服务器,这三台检索服务器分别为检索服务器0、检索服务器1和检索服务器2。其中,高频关键词“中国”的倒排表项中的文档篇号列表为{16,38,100,207,3 19,872,903,1081,2331,5618},低频关键词“徐建军”的倒排表项中的文档篇号列表为{38,295,307,971,2331}。
由于“中国”为高频关键词,因此该高频关键词的各个文档篇号对3取模后分别对应集群中的三台检索服务器,比如文档篇号16对3取模后的值为1,因此文档篇号16的倒排表项对应集群中的检索服务器1。由此对这两个关键词进行与操作时,首先,集群中的检索服务器0相应读取文档篇号为{207,903,2331}的倒排表项,集群中的检索服务器1相应读取文档篇号为{16,100,319,1081}的倒排表项,集群中的检索服务器2相应读取文档篇号为{38,872,5618}的倒排表项,图5中的三台检索服务器分别保存了一部分低频关键词的所有倒排表项,并且假设集群中的检索服务器2读取包含低频关键词“徐建军”的所有文档篇号{38,295,307,971,2331}的倒排表项;其次,集群中的检索服务器完成对关键词的倒排表项的读取后,将低频关键词“徐建军”的倒排表项分发到集群中的三台检索服务器,具体通过将低频关键词的文档篇号对3取模后对应集群中的三台检索服务器,由此该低频关键词文档篇号为{2331}的倒排表项发送到检索服务器0,文档篇号为{295,307}的倒排表项发送到检索服务器1,文档篇号为{38,971}的倒排表项发送到检索服务器2,得到检索的中间结果;最后,集群中的三台服务器分别对高频关键词“中国”和低频关键词“徐建军”的倒排表项进行与操作,检索服务器0的检索结果是文档篇号为2331的文档,检索服务器1的检索结果为空,检索服务器2的检索结果是文档篇号为38的文档,将三个检索服务器的检索结果汇总后,得到对检索串“中国徐建军”进行检索后的结果为文档篇号为{2331,38}的文档。
本发明***的实施例框图如图6所示:
该分布式索引文件的检索***包括:缓存代理服务器610、集群代理服务器620以及检索服务器630。
其中缓存代理服务器610用于对获取的检索串进行解析后生成由关键词组成的检索表达式;集群代理服务器620用于将关键词的检索请求及该关键词的倒排表项的预读请求发送至集群中的检索服务器630;检索服务器630用于按照关键词命中文档的频率高低读取关键词的倒排表项,并对关键词的倒排表项进行逻辑操作后输出检索结果。
应用本发明***的检索模型示意图如图7所示,该示意图中的缓存代理服务器、集群代理服务器以及检索服务器呈“树型”分布,该***中包括一个缓存代理服务器,该缓存代理服务器下连接N台集群代理服务器,每一台集群代理服务器下面连接N台检索服务器,每一组N台检索服务器组成一个集群检索子***。
其中,缓存代理服务器为一个独立的进程,可以驻留在一台硬件服务器上,其功能是对外部输入的检索串的查询结果进行缓存,同时调用检索服务器中的检索解释程序将外部输入的检索串解析成机器能够读懂的检索表达式,并将解析后的检索表达式分发给每个检索集群子***,当每个检索集群子***返回相应的检索结果到集群代理服务器后,再由该缓存代理服务器汇总所有集群代理服务器的结果并返回给外部用户。
集群代理服务器是一个独立的进程,可以驻留在一台硬件服务器上,其功能是对缓存代理服务器发过来的检索表达式进行检索,并将检索任务在下方的检索集群子***内部进行调度,并最终汇总该检索集群子***的检索结果,将检索结果返回给上层的缓存代理服务器。
每一台检索服务器都是一个独立的进程,可以驻留在一台硬件服务器上,其为一个最基本的检索单元,在上层集群代理服务器的调度下,进行基本的底层检索操作,包括读取关键词的倒排表项,以及进行相应的“与”“或”“非”等逻辑操作。
本发明对词频不同的关键词的倒排表项的读取策略通过下述实验得到,在互联网随机下载得到的1500万个网页文档中,我们对其中的语素进行统计,命中文档数量超过1000篇的一元、二元、三元语素总数量不超过50万。那么可以推想在1亿篇文档中,命中文档数量在6000-10000篇的语素数量不会超过50万,假定存储文档标识(8字节)、权值(3字节)以及位置偏移(压缩后2字节),在命中5000篇时的存储空间为64k,在命中10000篇时的存储空间为128k,读取时间8毫秒。在如图7所示的新的分布式检索模型中,采用16台机器一组,对于倒排表项存储空间(包括文档标识、权值和位置偏移)在64k以上的语素采用文档分隔,在64k以下的语素采用语素分隔。对于64k以下的语素每次读取一个语素的倒排表项的时间小于8毫秒,对于64k以上的语素,记录为文档篇号(压缩后<2字节)、权值(3字节)以及位置偏移(压缩后<2字节),在每台检索服务器64k-128k的读取量上,可以存放(64k-128k)/7*16=15-30万,对于中高频关键词命中率在千分之三以下,则每次读取时间也在8毫秒之内,对于这两种情况,都可以采用一次性把所有的倒排表项读完。对于命中率超过千分之三以上的高频语素可以只存放权值较高的部分,权值较低的部分可以做停用处理,以使得每个语素的最大倒排表项空间不超过1M,即读取时间不超过50ms。
应用图7中检索模型进行检索的流程图如图8所示:
步骤801:缓存代理服务器解析检索串后将由关键词组成的检索表达式发送给全部的集群代理服务器。
步骤802:集群代理服务器根据关键词命中文档的频率高低将检索请求和倒排表项的预读请求发送到相应的检索服务器。
步骤803:检索服务器接收检索请求后获取关键词倒排表项的倒排文档。
步骤804:检索服务器使用倒排文档的文档篇号对关键词进行逻辑运算。
步骤805:各个检索服务器将逻辑运算后的结果发送到上层集群服务器进行汇总得到中间结果。
步骤806:各个集群服务器将中间结果发送到上层缓存代理服务器汇总得到最终结果并输出。
本发明检索服务器的实施例框图如图9所示:
该检索服务器包括:检索解释模块910、读取管理模块920、关键词读取模块930、逻辑运算模块940以及标识转换模块950。
其中,检索解释模块910用于对获取的检索串进行解析后生成由关键词组成的检索表达式供上层服务器调用;读取管理模块920用于接收关键词的检索请求及该关键词的倒排表项的预读请求;关键词读取模块930用于按照关键词命中文档的频率高低读取高频关键词的一部分倒排表项,和/或低频关键词的全部倒排表项;逻辑运算模块940用于对高频关键词的倒排表项和低频关键词的倒排表项进行逻辑操作后输出检索结果;标识转换模块950用于将关键词倒排表项中的八字节的文档标识压缩为四字节的文档篇号。
由以上实施例可见,本发明的分布式索引文件的检索方法,通过对获取的检索串进行解析后生成由关键词组成的检索表达式,将关键词的检索请求及该关键词的倒排表项的预读请求发送至集群中的各个检索服务器,集群中的检索服务器按照关键词命中文档的频率高低读取关键词的倒排表项,集群中的检索服务器对关键词的倒排表项进行逻辑操作后输出检索结果。应用本发明可以有效提高检索集群内部检索服务器之间的耦合度,并且增加了服务器之间的资源动态调配能力,通过把集群内的多台检索服务器的资源进行统一规划,最大限度保证了集群整体的并发能力,使得检索速度得到极大的提高。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。