具体实施方式
本发明的实施例提供一种分布式结构化网络中的查询方法。分布式结构化网络(以DHT网络为例)主要是由普通节点组成,在该网络中,通过节点之间的自动调节来完善整个网络的整体架构。根据用户的选择,在分布式结构化网络中,节点可以选择成为网络中的一个节点,也可以通过其他接入节点参与网络中的业务应用。节点只需要安装相关的软件,就表示节点加入到了该系统。
以DHT网络为例,DHT网络中路由搜索的主要特点包括:
①散列表的建立:节点标识符采用节点名字(如IP地址)的Hash值;对象的标识符采用对象名的Hash值;每个节点存储一张散列表,记录对象标识符与节点物理地址的映射。
②内容的查找:内容查找通过<Key,Value>对来查询,Key指对象标识符,Value指Key所对应的数值,可以自定义,如表示某个文件的名字之类。
③定位关键字所在的节点:将各个节点所具有的<key,value>对保存在与对象标识符相近的节点标识符的机器中,使对象标识符与节点标识符相对应。
④<key,value>对的流动:当有新节点或新的<key,value>对出现时,将对应的<key,value>对转移到对应的节点上;当旧节点离开时,将其存储的<key,value>对转移到相邻的节点上。
本发明实施例所涉及的系统主要是针对内容共享,用户需要在终端建立一个共享文件夹,并把一些共享内容放置到该共享文件夹中。终端可以提取出这些内容的关键词发送到DHT网络中,建立索引。
本发明的实施例中,终端创建共享内容的流程图如图1所示,包括以下步骤:
步骤s101、选择共享内容并提取共享内容中的关键词。
具体的,终端启动后,检查本地共享文件夹中的共享内容,并将其中的关键词Key提取出来。提取关键词Key的位置可以包括文件名、作者、关键词等,大小可以精确到Byte。其中,以文本文档为例,文本文档中需要提取的关键词的位置主要包括:文件名、标题、作者、单位、正文的关键词、以及文章的开始、结束以及中间位置等。
步骤s102、计算关键词的权值并排列,得到关键词组。
具体的,对于每一个关键词Key,获取到该关键词Key的位置后,需要计算该关键词Key的权值。对于同一个关键词Key出现在上述不同位置时,不同位置的权重可相同或不同。以下以权值表示关键词所处的位置的权重,不同位置所对应的权值相同或不同。对于同一个关键词Key,将该关键词Key所在位置对应的权值进行累加,同一位置多次出现时进行该位置对应的权值的多次累加,最终得到的值即为该关键词Key的权值。关键词Key的权值越大,表示关键词Key越能表示共享内容。例如,对于以下位置,每一个位置所对应的权值分别为:
文件名中-a;标题中-b;正文中-c;文章摘要中-e;关键词-g;文章开头段落或者结束段落-d;被特殊标识的-f。如果一个关键词Key在以上所有的范围中都出现过一次,那么该关键词Key的权值为:a+b+c+d+e+f+g。
之后,对于不同的关键词Keys,按照其权值进行排列,得到关键词组KeyArray[n],该关键词组表示共享内容的特征向量。例如在KeyArray[n]中包括所有关键词的KeyList,如Key_i1、Key_i2…Key_in共n个关键词Key。
步骤s103、收集共享内容的元数据信息并组成包。
具体的,终端统计并收集共享内容的元数据信息,包括共享内容存储的位置以及终端的信息等,并将收集到的信息组成一个包Packet。例如,一个包Packet中可以包括:ContentID、Value、Metadata以及AddrInfo。其中:
ContentID:表示该共享内容在该网络中的唯一标识;
Value:表示关于关键词和该关键词的权值的信息,其中可以包括<Weight_i,Key_i>;Key_i表示在该共享内容中出现的关键词,Weight_i表 示该关键词的权值;
Metadata:包括该共享内容的相关属性如文件格式、大小、关键词数量IndexNum等等。
AddrInfo:记录终端和用户的信息。
步骤s104、将包发送到网络。
具体的,终端可以将这些信息传递到Node1=Hash(KeyArray[0]).Node上进行存储,即对KeyArray[0]进行Hash运算得到Node1;Node1再把这个内容传递到Node2=Hash(KeyArray[1]).Node,并进行存储;Node2,再进行转发,最后把这个内容传递到节点Node(N)=Hash(KeyArray【N-1】).Node。该步骤中的N是由系统确定。收到该包的其他节点可以根据该Packet的内容在本地维护该终端的相关信息,该信息可用于之后的内容查询流程。
上述步骤s101~s104描述的终端创建共享内容的示意图如图2所示。终端生成包Packet,并上传到接入节点,通过接入节点将该Packet的内容传递到DHT网络中各个哈希对应的节点上。该过程请参考上述步骤s101~s104,在此不进行重复描述。
网络中的节点接收到其他节点发送的携带元数据信息的包后,在本地对接收到的包进行存储。需要存储的内容分别存储在节点本地的内容表和文词表中,以下分别对内容表和文词表的内容进行介绍:
对于内容表,其中包括的内容为:ContentID、Value、Metadata以及AddrList。其中:
ContentID:表示该共享内容在该网络中的唯一标识;
Value:表示关于关键词和该关键词的权值的信息,其中可以包括<Weight_i,Key_i>;Key_i表示在该共享内容中出现的关键词,Weight_i表示该关键词的权值;
Metadata:包括该共享内容的相关属性如文件格式、大小、关键词数量IndexNum等等。
AddrList:记录了目前哪些节点拥有该共享内容。
对于文词表,可以用矩阵的形式来表示,其格式如图3所示,其中行表示 关键词Key,列表示共享内容在该网络中的唯一标识ContentID。行列交叉之处的数值表示在该ContentID表示的共享内容中是否存在该关键词Key。例如如果为1,则表示该ContentID表示的共享内容有该关键词Key,如果为0则表示没有;当然也可以采用其他数值,在此不重复描述。
本发明的实施例中,节点对接收到的包进行存储的步骤如图4所示,包括以下步骤:
步骤s401、获取包中的ContentID。
步骤s402、查询内容表,判断内容表中是否已经存在相同的ContentID,存在时进行步骤s403,否则进行步骤s404。
步骤s403、将包中的AddrInfo所记录的用户信息存储到内容表的ContentID所对应的AddrList中并结束。
步骤s404、将该包中的信息添加到内容表中。具体的,根据包中的内容在内容表中建立相应的ContentID、Value、Metadata以及AddrList。
步骤s405、将该包的Value中存在的关键词和ContentID关系添加到文词表中。
本发明的实施例中,节点对接收到的查询命令进行查询的步骤如图5A所示,包括:
步骤s51、获取查询命令中的多个待查询的关键词。
步骤s52、生成包括多个待查询的关键词的查询数组。
步骤s53、将每个待查询的关键词分别作为索引关键词,获取与查询数组中每个待查询的关键词所对应的节点。
步骤s54、向与查询数组中的每个关键词所对应的节点发送携带查询数组的查询请求。
本发明的实施例中,节点对接收到的查询命令进行查询的步骤如图5B所示,包括:
步骤s501、获取查询命令中待查询的关键词以及每个关键词的权值大小。
步骤s502、按照权值大小对所述待查询的关键词进行排列,生成包括按照权值大小排列的待查询关键词的查询数组。
具体的,终端从文件或者输入的查询文字中提取出需要搜索的关键词,然后把提取到的关键词按照权值进行排列,获得一个查询数组SearchValue。
步骤s503、将每个待查询的关键词分别作为索引关键词,获取与查询数组中每个索引关键词所对应的节点。
步骤s504、向与每个索引关键词组中的每个关键词所对应的节点发送携带所述查询数组的查询请求。
具体的,终端可以选取查询数组SearchValue中权值最大的前M个关键词作为查询的关键路径。根据本地维护的网络中各节点的索引信息,对该M个关键词中每一个关键词IndexKey分别选取对应的节点,如Node1=Hash(IndexKey【0】).Node、Node2=Hash(IndexKey【1】).Node…,然后将该查询数组SearchValue发送到所选取的各个节点上。在发送的方式上,终端可以一次性把所有的内容传递给所有与M个IndexKey对应的DHT网络节点,然后这些节点并发的在本地进行查询;或在在OpenDHT上实现应用层组播,首先将查询数组SearchValue发送到Hash(IndexKey【0】).Node,然后再进行通过应用层组播,传递到其他M-1个节点上。
本发明的实施例还提供一种分布式结构化网络中的查询方法,如图6A所示,包括以下步骤:
步骤s61、第一节点接收到第二节点发送的携带查询数组的查询请求,查询数组中包括多个待查询的关键词。
具体的,该多个待查询的关键词可以按照权值大小进行排列,该多个待查询的关键词中,包括一关键词与第一节点对应,该关键词即为第一节点的索引关键词。
步骤s62、第一节点根据待查询的多个关键词,获取查询结果。
步骤s63、第一节点将查询结果向第二节点发送。
具体的,当节点接收到其他节点发送的对特定的查询数组SearchValue进行检索的请求,其中包括与本节点对应的IndexKey,如图6B所示,进行以下查询流程:
步骤s601、查询本地的文词表的Key中是否拥有该IndexKey,若有则继续 步骤s602,否则结束。
步骤s602、根据文词表,获取拥有该IndexKey的所有ContentID。
步骤s603、对于每一ContentID,分别获取不同ContentID中的所包括的Value。
步骤s604、对获取到的Value进行过滤操作。
具体的,对于每一ContentID的Value,分别与SearchValue中比IndexKey权值大的其他关键词Key进行比较,过滤掉在比IndexKey权值大的关键词Key所对应的节点上已经检索过的Value。该步骤的目的在于:由于在多个节点之间可能存储着相同的节点备份,所以需要对查询到的内容进行过滤,防止反馈的信息中包括过多的重复内容。例如查询数组为(A,B,C,D,E,F),发送到D哈希所对应的节点4上,该请况下如果节点4上存在相应登记的关键词组(O,B,D,G,J),就要把该关键词组过滤掉,因为已经在B对应的节点上登记过。
步骤s605、获取剩余的Value和SearchKey的相关性,按照相关性的大小对Value进行排列后得到查询结果。
上述步骤s604中对获取到的Value进行过滤操作的一例如下:假设一节点上存在两个Value关键词文档,该节点对应的索引关键词为IndexKey,一个是查询Value_O,另一个是被比较关键词文档Value_C,Value_O和Value_C中关键词Key的数量分别是IndexNum_O和IndexNum_C。查询过程中与该节点对应的关键词为IndexKey。当Value_O和Value_C中所包括的关键词Key分别按照权值大小排序时,该IndexKey在Value_O和Value_C中的位置分别是KeyPos_O和KeyPos_C。初始设定过滤索引数量为ComNum=IndexNum_O,则过滤处理流程如图7所示,包括以下步骤:
步骤s701、获取IndexKey在Value_O和Value_C中的位置,分别为KeyPos_O和KeyPos_C。
步骤s702、设置ComNum的值为IndexNum_C。
步骤s703、把在Value_O中权值大于IndexKey的关键词组成一个组ComArray。
步骤s704、判断KeyPos_C是否大于等于IndexNum_C,不是则进行步骤s705,否则进行步骤s706。
步骤s705、设置ComNum的值为KeyPos_C并继续。
步骤s706、判断Value_C中前ComNum个Key中是否存在CommArray中的某一个或者多个关键词,如果存在则结束对当前两个Value关键词文档的过滤操作、继续进行其他Value关键词文档的过滤操作,否则进行步骤s707。
步骤s707、进行相似度计算并结束。
相似度计算的一例如下:假设两个共享内容各自对应的Value_O和Value_C,首先对把两者Value_O和Value_C进行向量扩展,具体的扩展方法如下:
首先假设Value_O=(A1,A2,A3,…,An),Value_C=(B1,B2,B3,…,Bm),并以向量Value_X表示以上两个向量的并集:n为向量Value_O的维数,m为向量Value_C的维数。
Value_X=Value_O∩Value_C=(X1,X2,X3,…,Xt),t≥n,m,t为向量Value_X的维数。
将Value_O和Value_C扩展为t维向量,对于没有在Value_X中出现的单位设置为0,则向量扩展后的结果为:
Value_O→Value_XO=(XO1,XO2,XO3,……,XOt)
Value_C→Value_XC=(XC1,XC2,XC3,……,XCt)
根据向量扩展后的结果,Value_O和Value_C的相似度计算方法为:
得到Value_O和Value_C的相似度。
上述描述查询流程的示意图如图8所示。终端通过接入节点接入网络后,将需要查找的关键词组发送到接入节点,接入节点根据该关键词组中的索引关键词,将该关键词组发送到与索引关键词哈希对应的DHT网络中的其他节点上。接收到关键词组的其他节点进行关键词查询,并对查询结果进行过滤, 以与KeyN哈希对应的节点为例,在查询到的结果中,过滤掉有关键词Keyi(i=1,2…N-1)且其权值大于KeyN的结果。各节点将最终的查询结果通过接入节点发送到终端。该查询过程请参考上述图6以及图7中的描述,在此不进行重复描述。
本发明的实施例中,还提供了一种某节点退出时,网络中其他节点进行的节点退出流程。当一节点检测到特定节点退出网络时,若发现本地内容表中的特定内容只在该特定节点存在,则将该特定内容从本地内容表中删除,将该特定内容以及对应的关键词从本地文词表中删除;若发现本地内容表中的特定内容不只在该特定节点存在时,从与该特定内容对应的节点记录中删除该特定节点。如图9所示,该节点退出时的处理流程包括以下步骤:
步骤s901、网络节点检测到某个本地登记的节点退出。
步骤s902、对于本地的内容表中的每一ContentID,判断该ContentID的Addlist中是否只存在该节点,是则进行步骤s903,否则进行步骤s905。
步骤s903、从文词表中删除该ContentID。
步骤s904、从内容表中删除该ContentID,并进行步骤s906。
步骤s905、从ContentID的Addlist中将该节点删除。
步骤s906、判断是否为首次发现该节点退出,是则进行步骤s907,否则结束。
步骤s907、根据节点的ContentID中的Value和IndexNum,通知其他节点。
基于本发明的实施例中提供的方法,通过对所查询的关键词的扩展,实现了多关键词的查询,扩展了查询可选择的范围,使得网络上的索引登记不仅仅限于内容的文件名或者标题,而且还可以扩展到内容正文中的摘要、内容、作者等内容,与单一关键词的查询相比得到了更加全面和完备的查询结果。另外,通过对查询结果的过滤,防止了相同内容的多次返回;且通过相似度排序功能,使得查询返回的结果更加人性化。
本发明的实施例中还提供一种分布式结构化网络中的查询系统,包括第一节点和第二节点。其中:
第一节点,用于接收第二节点发送的携带查询数组的查询请求,查询数组中包括多个待查询的关键词;根据多个待查询的关键词,获取查询结果并将查询结果向第二节点发送。
第二节点,用于获取查询命令中的多个待查询的关键词;生成包括待查询的关键词的查询数组;将每个待查询的关键词分别作为索引关键词获取对应的节点;向获取到的对应节点发送携带查询数组的查询请求,获取到的对应节点包括第一节点。
本发明的实施例中,还提供一种节点设备,作为第一节点用于分布式结构化网络中的关键词查询,其结构如图10所示,包括:
消息处理模块10,用于接收到第二节点发送的携带查询数组的查询请求,所述查询数组中包括多个待查询的关键词。
索引查询模块20,用于根据消息处理模块10接收到的多个待查询的关键词,获取查询结果。
消息转发模块30,用于将索引查询模块20获取到的查询结果向所述第二节点发送。
本发明的实施例中,如图11所示,该节点设备中:
消息处理模块10可以进一步包括第一消息处理子模块11,用于接收第二节点发送的查询数组的查询请求,该查询数组中包括多个待查询的关键词且多个待查询的关键词按照权值大小排列,该多个待查询的关键词中存在一关键词与第一节点对应,该与第一节点对应关键词为所述第一节点的索引关键词。
该节点设备还包括:
内容过滤模块40,用于对索引查询模块20获取到的查询结构进行过滤。
相似度获取模块50,用于对内容过滤模块40过滤后的查询结果根据相似度进行排序,并将处理后的查询结果发送给消息转发模块30。
索引存储模块60,用于接收网络中其他节点发送的包。
内容管理模块70,用于对索引存储模块60接收到的包进行存储;并将内容提供给索引查询模块20用于查询,内容包括内容表和文词表。
内容管理统计模块80,用于获取共享内容的信息并组成包,将组成的包通过消息转发模块30向网络中的其他节点发送。
退出管理模块90,用于检测到网络中的第三节点退出时,对内容管理模块70中存储的所述第三节点上存在的内容进行修改。
本发明的实施例还提供一种查询设备,作为第二节点用于分布式结构化网络中的关键词查询,其结构如图12所示,包括:
关键词获取模块110,用于获取查询命令中的多个待查询的关键词。
查询数组生成模块120,用于生成包括关键词获取模块110获取的多个待查询的关键词的查询数组。
节点获取模块130,用于将关键词获取模块110获取的每个待查询的关键词分别作为索引关键词,获取与所述查询数组中每个待查询的关键词所对应的节点。
查询请求发送模块140,用于向节点获取模块130获取的节点发送携带查询数组生成模块120获取的查询数组的查询请求。
另外,如图13所示,该节点设备还可以包括:
关键词权值获取模块150,用于获取关键词获取模块110获取的每个待查询的关键词的权值大小;并提供给查询数组生成模块120用于对查询数组中的待查询的关键词按照权值大小进行排列。
基于本发明的实施例中提供的系统和设备,通过对所查询的关键词的扩展,实现了多关键词的查询,扩展了查询可选择的范围,使得网络上的索引登记不仅仅限于内容的文件名或者标题,而且还可以扩展到内容正文中的摘要、内容、作者等内容,与单一关键词的查询相比得到了更加全面和完备的查询结果。另外,通过对查询结果的过滤,防止了相同内容的多次返回;且通过相似度排序功能,使得查询返回的结果更加人性化。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台网络设备执行本发明各个实施例所述的方法。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。