CN106874425B - 基于Storm的实时关键词近似搜索算法 - Google Patents
基于Storm的实时关键词近似搜索算法 Download PDFInfo
- Publication number
- CN106874425B CN106874425B CN201710057432.XA CN201710057432A CN106874425B CN 106874425 B CN106874425 B CN 106874425B CN 201710057432 A CN201710057432 A CN 201710057432A CN 106874425 B CN106874425 B CN 106874425B
- Authority
- CN
- China
- Prior art keywords
- subgraph
- ontology
- data
- keywords
- hash
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2462—Approximate or statistical queries
Abstract
本发明涉及一种基于Storm的实时关键词近似搜索算法,综合使用Redis内存数据库中的Hash、Set和Sorted Set三种数据结构来分门别类地存储RDF数据;结合Storm流式处理框架实现了RDF数据的实时流入和实时近似搜索;同时利用存储在Redis内存数据库集群中的历史数据来加快关键词近似搜索的效率。本发明支持对实例、文本、类和属性的搜索,并且实现对流式数据的实时近似搜索,具有明显的优势。
Description
技术领域
本发明属于海量RDF数据检索技术领域,尤其涉及一种基于Storm的实时关键词近似搜索算法。
背景技术
目前,RDF已被广泛应用,数据量也成几何式地增长,众多机构和项目均采用RDF表达元数据,如DBpedia、DBLP、IBM的“智慧地球”项目等。面对如此爆炸式增长的数据压力,RDF数据存储、搜索和推理在性能和扩展性方面都面临着新的挑战。
关键词搜索作为最受普通用户欢迎的搜索方式,普通用户只要输入想要进行搜索的关键词,就能够方便快捷地搜索得到自己想要的结果。关键词搜索不仅适用于结构化、半结构化的数据,而且对非结构化的数据也提供了良好的支持,弥补了结构化查询存在的不足。随着RDF数据的飞速增长,涌现出了大量针对RDF数据关键词搜索的研究工作。Ladwig G等人根据抽取的结构信息构造关键词对应的搜索图并生成结构化查询语句,结合相关的索引信息直接搜索得到结果。Le W等人根据语义信息提取RDF数据图中的摘要信息,并且支持增量地更新摘要信息,同时把摘要信息用于查询剪枝从而加速搜索效率。Virgilio R D等人利用MapReduce计算模型将图并行问题转换为数据并行处理问题,实现了分布式RDF关键词的搜索。
随着大数据的到来,Hadoop等分布式处理平台在进行批量处理的时候具有明显的优势,但是面对流式数据的实时处理却表现出了许多不足,流式数据实时处理平台的出现弥补了分布式批量处理平台在实时处理方面的不足。蒋晨晨等人基于Storm提出了一种新的实时搜索框架,并且重新设计了分组算子、过滤算子等功能,解决了传统流式查询系统不能满足用户实时查询的不足。然而上述关于流式数据的研究都是针对形式化查询语句的,关于流式数据关键词实时搜索的研究少之又少,研究流式数据的关键词实时搜索方案具有非凡的意义。
现存的RDF关键词搜索方法几乎都是针对大规模RDF数据的批量搜索,无法完成对流式数据的实时关键词搜索,并且一般都是直接在大规模的RDF数据图中搜索关键词匹配的节点,进行连接操作后返回搜索结果,搜索效率并不理想,而且现存的方法中用到的数据存储媒介一般都是基于磁盘读取的,读取速度比较慢。同时,有的方法需要构建关键词索引和数据图的模式索引,也要构建形式化查询语句,并且依赖用户的反馈信息。有的方法需要构建并维护索引,并且随着数据量的增大,构建和维护索引的代价变得越来越高。此外,用户可能也不明确自己的搜索意图,对RDF数据的结构和内容不一定了解,并且不同的用户对同一事物的描述可能存在差异,这就导致了在RDF数据搜索的过程中可能返回空或者少量的结果。
发明内容
有鉴于此,本发明的目的在于提供一种基于Storm的实时关键词近似搜索算法,支持对实例、文本、类和属性的搜索,并且实现对流式数据的实时近似搜索,具有明显的优势。
为实现上述目的,本发明采用如下技术方案:一种基于Storm的实时关键词近似搜索算法,其特征在于:包括分布式存储和Storm实时搜索处理;
所述分布式存储包括以下步骤:
步骤A1:对RDF数据进行预处理;
步骤A2:对预处理后的RDF数据进行数据哈希编码压缩;
步骤A3:将数据哈希编码压缩后的RDF数据存储在Redis分布式数据库中,所述Redis分布式数据库中存储了五类数据,包括本体数据、实例数据、历史数据、哈希映射信息和缓存数据;
所述Storm实时搜索处理包括以下步骤:
步骤B1:输入关键词集合;
步骤B2:根据关键词集合、本体数据、历史数据及哈希映射信息进行关键词映射匹配得到匹配的模式三元组、本体子图及其语义评分或者Top-k结果子图;
步骤B3:根据匹配的模式三元组、关键词集合的真子集对应的本体子图及其语义评分进行本体子图构建排序得到本体子图及其语义评分;
步骤B4:根据本体子图及其语义评分、实例数据及缓存数据进行结果子图构建得到结果子图;
步骤B5:当结果子图中的实例三元组条数未达到预设值k时,根据缓存数据进行近似本体子图构建排序得到近似本体子图及其语义相似度评分;
步骤B6:根据所述近似本体子图及其语义相似度评分进行近似搜索结果子图;
步骤B7:对所述Top-k结果子图进行编码反转;
步骤B8:将编码反转后的Top-k结果子图传给DRPC服务器,并返回Top-k结果子图。
本发明与现有技术相比具有以下有益效果:本发明支持对实例、文本、类和属性的搜索,并且实现对流式数据的实时近似搜索,具有明显的优势;另外本发明还减少了数据读取和搜索的时间,显著地提高了搜索效率。
附图说明
图1是本发明的总体框架图。
图2是本体扩展规则示意图。
具体实施方式
下面结合附图及实施例对本发明做进一步说明。
以下给出本文的相关定义。
定义1.本体扩展:模式三元组上的本体扩展是将本体扩展规则应用在本体的上下文中。设onto为RDF数据图的本体,closure(onto)为onto的闭包,给定模式三元组T1,并且如果用图2中三条规则的任一规则或者多条规则,可以由T1得到T1’,并且则记为T1∪onto∪rules→T1’,则称T1’是T1的一个近似模式三元组。图2中sc表示rdfs:subClassOf,sp表示rdfs:subPropertyOf。
本体扩展包括属性扩展和类扩展,类扩展又可以分为对模式三元组的主语或者宾语进行的扩展:
(1)模式三元组谓语的扩展如果(a,sp,b)∈closure(onto)成立,模式三元组(x,a,y)可扩展为(x,b,y)。
(2)模式三元组主语的扩展如果(a,sc,b)∈closure(onto)成立,模式三元组(a,p,y)可扩展为(b,p,y)。
(3)模式三元组宾语的扩展如果(a,sc,b)∈closure(onto)成立,模式三元组(x,p,a)可扩展为(x,p,b)。
定义2.三元组连接:在构建本体子图或者结果子图的时候,对于匹配的模式三元组或者实例三元组要进行三元组连接操作,其中任意两个三元组通过主语、宾语或者其他三元组连接起来。三元组连接的形式化表示:对于模式三元组或者实例三元组集合Set={T1,T2,…,Ti,…,Tm},给定Ti(Si,Pi,Oi)和Tj(Sj,Pj,Oj),其中 如果(Si=Sj&&Oi≠Oj)或者(Si=Oj&&Oi≠Sj)或者(Oi=Sj&&Si≠Oj)或者(Oi=Oj&&Si≠Sj),则称Ti与Tj相邻,可以进行三元组连接。
定义3.语义评分函数:对于得到的多个本体子图,利用语义评分函数进行评分,得分高的优先进行分布式搜索。设本体子图Gs={T1,T2,…,Ti,…,Tm},该本体子图中包含的类集合C={c1,c2,…,ci,…,cp},该本体子图中包含的属性集合P={p1,p2,…,pi,…,pq},则该本体子图的语义评分函数可以表示为:
语义评分函数SSF(Gs)由语义内容CCDis(Gs)和语义结构PPDis(Gs)两部分组成。α是调节参数,当α=0.5时,表示两者的影响程度一样。dis(ci,cj)表示类ci与类cj之间的语义距离:
其中n是这两个类之间最短路径上边的条数。类间距离之和越小,1/CCDis(Gs)的值越大,说明该本体子图的语义内容越紧密。
dis(pi,pj)表示属性pi与属性pj之间的语义距离:
其中d是这两个属性之间最短路径上模式三元组的个数。属性间距离之和越小,1/PPDis(Gs)的值越大,说明该本体子图的语义结构与用户想要的搜索结果越相似。利用语义评分函数SSF(Gs),使得评分高的本体子图优先进行分布式搜索。
定义4.语义相似度函数:RKASS算法利用语义相似度函数来衡量初始本体子图与扩展后的近似本体子图之间的相似程度,相似度越大的越优先执行分布式搜索。语义相似度计算过程中涉及类节点之间、属性节点之间、模式三元组之间以及本体子图之间的语义相似度计算。这里借鉴文献[14]中定义的最小公共祖先(Least Common Ancestor,LCA)概念和语义相似度计算方法来完成RKASS算法的语义相似度计算。
类节点之间的语义相似度
模式三元组中的主语或宾语是一个类,在RDFs本体层次结构中可以看成一个节点,那么初始本体子图上的节点c1和c1扩展后对应的节点c1’之间的语义相似度公式如下:
s(c1,c1’)=d(c1)+d(c1’)-2×d(LCA(c1,c1’)) 公式(3-4)
其中,d(c)是指节点c在本体层次结构图中的深度。
属性节点之间的语义相似度
模式三元组中的谓语是一个属性,在RDFs本体层次结构中也可以看成一个节点,那么初始本体子图上的属性节点p1和p1扩展后对应的属性节点p1’之间的语义相似度公式s(p1,p1’)与公式(3-4)类似:
s(p1,p1’)=d(p1)+d(p1’)-2×d(LCA(p1,p1’)) 公式(3-5)
其中,d(p)是指节点p在本体层次结构图中的深度。
模式三元组之间的语义相似度
设T1(S1,P1,O1)和T1’(S1’,P1’,O1’)分别表示初始本体子图中的模式三元组和近似本体子图中对应的模式三元组,综合公式(3-4)和(3-5),T1和T1’之间的语义相似度公式如下:
s(T1,T1’)=s(S1,S1’)+s(P1,P1’)+s(O1,O1’) 公式(3-6)
本体子图之间的语义相似度
设G1={T1,T2,…,Ti,…,Tm}和G1’={T1’,T2’,…,Ti’,…,Tm’}分别表示初始本体子图和近似本体子图,G1和G1’之间的语义相似度公式如下:
初始本体子图与近似本体子图之间的语义相似度越大,说明该近似本体子图与初始本体子图越相似,那么该近似本体子图越优先进行分布式搜索,这样就能保证在返回结果没有达到Top-k的情况下进行的近似分布式搜索,也能返回用户最想要的结果。
定义5.BKDRHash算法:是一种简单有效的字符串哈希算法,能够将任意长度的字符串通过散列计算,变换成固定长度的整形数值,该值称为散列值,即哈希值。该算法得到的哈希值占用的存储空间比对应的字符串小,虽然不同的字符串可能散列计算得到相同的哈希值,但是发生冲突的概率很低,100000个不同的字符串进行散列发生冲突的字符串个数为0~3个,1000000个不同的字符串散列计算所耗费的时间仅为109ms,并且要得到哈希值为同一个数值的多个不同字符串在计算上是不可能的,因此可以利用该算法的哈希值来检验数据的完整性。BKDRHash算法的代码如下所示:
请参照图1,本发明提供一种基于Storm的实时关键词近似搜索算法,其特征在于:包括分布式存储和Storm实时搜索处理;
所述分布式存储包括以下步骤:
步骤A1:对RDF数据进行预处理;
步骤A2:对预处理后的RDF数据进行数据哈希编码压缩;
步骤A3:将数据哈希编码压缩后的RDF数据存储在Redis分布式数据库中,所述Redis分布式数据库中存储了五类数据,包括本体数据、实例数据、历史数据、哈希映射信息和缓存数据;
所述Storm实时搜索处理包括以下步骤:
步骤B1:输入关键词集合;
步骤B2:根据关键词集合、本体数据、历史数据及哈希映射信息进行关键词映射匹配得到匹配的模式三元组、关键词集合的真子集对应的本体子图及其语义评分或者Top-k结果子图;
步骤B3:根据匹配的模式三元组、关键词集合的真子集对应的本体子图及其语义评分进行本体子图构建排序得到本体子图及其语义评分;
步骤B4:根据本体子图及其语义评分、实例数据及缓存数据进行结果子图构建得到结果子图;
步骤B5:当结果子图中的实例三元组条数未达到预设值k时,根据缓存数据进行近似本体子图构建排序得到近似本体子图及其语义相似度评分;
步骤B6:根据所述近似本体子图及其语义相似度评分进行近似搜索结果子图;
步骤B7:对所述Top-k结果子图进行编码反转;
步骤B8:将编码反转后的Top-k结果子图传给DRPC服务器,并返回Top-k结果子图。
分布式存储方案
由于Redis中Hash的添加、删除、判断以及查找操作的平均时间复杂度都是O(1),并且Sorted Set在Set的基础上增加了一个顺序属性,每次修改后Sorted Set都会自动重新按照新的值调整顺序。为了满足RDF数据实时流入和实时近似搜索的需求,综合使用Redis内存数据库中的Hash、Set和Sorted Set三种数据结构来分布式存储RDF数据。如图1所示,RKASS算法在Redis分布式数据库中存储了五类数据:本体数据、实例数据、历史数据、哈希映射信息和缓存数据。本体数据具体的存储方案如表1所示,实例数据具体的存储方案如表2所示。
表1 本体数据的存储方案
表2 实例数据的存储方案
表3、表4和表5分别显示了历史数据、哈希映射信息和缓存数据具体的存储方案。每次搜索完成或者有新的本体数据和实例数据流入Redis数据库集群时,都要更新历史数据中存储的信息,保证下次获取到的都是最新的信息。并且哈希映射信息随着数据的流入实时进行更新,确保哈希编码压缩的正确性和完整性。此外,缓存数据只有在关键词近似搜索的过程中才会进行创建、写入和读取,当搜索完成时将缓存数据中的相关信息写入Redis分布式集群的历史数据中,并且清空缓存数据,减少内存的消耗。
表3 历史数据的存储方案
表4 哈希映射信息的存储方案
表5 缓存数据的存储方案
数据哈希编码压缩
通过分析RDF数据的特点,可以发现不同的RDF数据集中的类、属性、实例和文本都有可能存在相同的前缀。Redis内存数据库对整形数值做了大量的内存优化,为了减少RDF数据的存储空间并且充分利用Redis对整形数值的优化功能,这里通过使用定义5中的BKDRHash算法对共同的前缀进行散列计算并转换为整形数值,该哈希算法可以保证数据均衡地散列在哈希列表中,并且发生冲突的概率非常低,同时拥有高效的散列速度。通过对数据进行哈希编码压缩不仅可以对RDF数据的前缀进行编码压缩,缩短前缀的长度进而减少内存空间的消耗,而且还能进一步提高RDF数据搜索匹配的速度。为了保证哈希编码压缩执行的效率,这里使用Storm流式处理框架对RDF数据进行实时哈希编码压缩,将大规模的RDF数据以数据流的形式持续流入Storm数据实时流入模块中,并且数据流以5×104个三元组/s的平均速度从数据预处理(JenaSpout)阶段流到数据哈希编码压缩(HashBolt)阶段,每秒钟的数据量平均达到8MB。
数据哈希编码压缩的过程如算法1所示,算法中的RDF三元组包括实例三元组和模式三元组,虽然BKDRHash算法发生冲突的概率极低,但在算法1中仍然考虑了冲突发生情况下的解决方案:
算法1:数据哈希编码压缩算法
输入:预处理后的RDF三元组(或关键词集合),哈希映射信息
输出:哈希编码压缩后的RDF三元组(或关键词集合)
关键词映射匹配
为了避免直接在大规模的RDF数据图上搜索关键词匹配的结果子图,RKASS算法根据存储的RDF本体数据对关键词进行映射并搜索得到匹配的模式三元组,为构建本体子图做好准备。由于Redis分布式数据库集群中存储的都是哈希编码压缩后的数据,因此要把关键词中包含的前缀替换成对应的哈希值,将关键词转换成哈希编码的格式。此外,历史数据中包含了以前搜索过的关键词集合的相关信息,RKASS算法充分利用了历史数据来更加高效地完成搜索任务。
关键词映射匹配(MapSpout)阶段是Storm实时搜索处理模块的数据源,接收来自外部DRPC(分布式远程过程调用)服务器传输过来的关键词集合Q,对哈希编码后的关键词进行映射匹配后将结果传输给其他阶段进行处理。由于在关键词映射匹配(MapSpout)的过程中根据历史数据中存储的信息判断是否是以前搜索过的关键词集合,并且通过分析历史数据可以得知RDF本体数据和RDF实例数据是否发生了改变,同时查看历史数据中是否存在当前搜索关键词集合的真子集,充分利用以前搜索存储的历史数据直接输出本体子图及其语义评分或者Top-k结果子图,而且借助历史数据中真子集对应的本体子图及其语义评分,只对不在真子集中的关键词进行映射匹配,减少了一些不必要的操作,因此关键词映射匹配(MapSpout)阶段有三个输出。同时,在关键词映射匹配(MapSpout)的过程中,将关键词及其对应的相关信息写入缓存数据中,以便在关键词近似搜索结束时用来更新历史数据。
关键词映射匹配的过程如算法2所示:
算法2:关键词映射匹配算法
输入:关键词集合,本体数据,历史数据,哈希映射信息
输出:关键词集合匹配的模式三元组(或本体子图及其语义评分,Top-k结果子图)
本体子图构建排序
本体子图构建排序(SubGraphScoreBolt)阶段作为Storm实时搜索处理模块的第二个环节,利用Storm的消息分发策略实时接收关键词映射匹配(MapSpout)阶段输出的模式三元组、关键词集合真子集对应的本体子图及其语义评分,并且按照定义2中的连接方法将模式三元组进行连接,生成对应的本体子图,如果有接收到真子集对应的本体子图及其语义评分,则将生成的本体子图与真子集的本体子图按照定义2进行连接,生成最终的本体子图。对于生成的多个本体子图,利用定义3对每个本体子图进行评分排序,得分高的优先搜索其对应的结果子图。同时,在本体子图构建排序(SubGraphScoreBolt)的过程中,将生成的本体子图及其对应的语义评分写入缓存数据中,以便在结果子图构建(ReSubGraphBolt)阶段和近似本体子图构建排序(ApproSubGraphBolt)阶段使用,同时在关键词近似搜索结束时用来更新历史数据。
本体子图构建排序的具体过程如算法3所示。
算法3:本体子图构建排序算法
输入:匹配成功的模式三元组、关键词集合真子集对应的本体子图及其语义评分
输出:本体子图及其语义评分
近似本体子图构建排序
当所有的本体子图都进行分布式搜索完成后,如果搜索得到的结果子图还没有达到k条,那么就要进入近似本体子图构建排序(ApproSubGraphBolt)阶段。近似本体子图构建排序(ApproSubGraphBolt)阶段首先获取缓存数据中的本体子图信息,根据定义1对本体子图进行扩展,生成对应的近似本体子图。由于扩展策略的多样性,本体子图可以扩展得到多个近似本体子图,为了保证最终结果的正确性,这里只采用扩展一层的策略。对于生成的多个近似本体子图,利用定义4对近似本体子图进行评分排序,得分高的优先进行近似搜索,得到其对应的结果子图。同时,在近似本体子图构建排序(ApproSubGraphBolt)的过程中,将生成的近似本体子图及其对应的语义相似度评分写入缓存数据中,以便在近似搜索结果子图(ApproReSubGraphBolt)阶段和关键词近似搜索结束更新历史数据的时候使用。近似本体子图构建排序(ApproSubGraphBolt)阶段充分利用了Storm流式处理框架实时计算的优势,当发现搜索得到的结果子图没有满足Top-k时,能够借助Storm的消息分发策略直接从结果子图构建(ReSubGraphBolt)阶段将所需的数据流入近似本体子图构建排序(ApproSubGraphBolt)阶段,以便实时地构建并排序近似本体子图。
近似本体子图构建排序的具体过程如算法4所示。
算法4:近似本体子图构建排序算法
输入:缓存数据中的SubGraph_Score有序集合
输出:近似本体子图及其语义相似度评分
结果子图构建
当完成本体子图构建排序(SubGraphScoreBolt)后,就要进入结果子图构建(ReSubGraphBolt)阶段。结果子图构建(ReSubGraphBolt)阶段实时接收本体子图构建排序(SubGraphScoreBolt)阶段输出的本体子图及其语义评分、实例数据以及缓存数据;接着结合本体子图中的模式三元组和缓存数据中存储的关键词信息,在实例数据中搜索对应的键值对记录;然后将模式三元组中的谓语和键值对记录中的主语和宾语进行组合得到匹配的实例三元组;最后通过定义2的连接方法对匹配的实例三元组进行连接,得到对应的结果子图。关键词集合中可能包含文本类型的关键词,可以在O(1)的时间内搜索Keywords_Inf得到文本类型关键词对应的实例,根据模式三元组和文本类型关键词对应的实例可以得到匹配的实例三元组,如算法5中的Step2。此外,关键词集合中可能包含实例类型的关键词,可以在O(1)的时间内搜索SC_OP_OC和OC_OP_SC得到以该实例为key的键值对记录,根据模式三元组和键值对记录得到匹配的实例三元组,如算法5中的Step3。同时,当得到的结果子图满足Top-k时,将本次关键词搜索过程中存储在缓存数据中的相关信息以及生成的结果子图写入历史数据中,以便之后的关键词近似搜索使用,如算法5中的Step7。由于近似搜索结果子图(ApproReSubGraphBolt)阶段与结果子图构建(ReSubGraphBolt)阶段的主要过程类似,因此这里只列出结果子图构建(ReSubGraphBolt)阶段的具体过程。
结果子图构建的具体过程如算法5所示。
算法5:结果子图构建算法
输入:本体子图及其语义评分、实例数据,缓存数据
输出:结果子图
编码反转
在得到Top-k结果子图之后,由于Top-k结果子图是哈希编码压缩的形式,为了将未哈希编码压缩的原始数据返回给用户,这时就要对得到的Top-k结果子图进行编码反转。RKASS算法中数据哈希编码压缩(HashBolt)过程是一个无损的压缩过程,编码反转(ReverseBolt)阶段能够很容易地进行哈希值的反转操作。编码反转(ReverseBolt)阶段实时接收传输过来的Top-k结果子图,并且借助Storm流式处理框架实时对Top-k结果子图中哈希值格式的前缀进行编码反转,将其转换成字符串格式的前缀,由于在数据哈希编码压缩(HashBolt)阶段没有对冲突前缀进行哈希编码压缩,而是保持字符串的格式不变,因此Top-k结果子图中的冲突前缀本身就是字符串格式的,不用对其进行编码反转操作。同时,哈希映射信息中存储了前缀字符串及其对应哈希值的相关信息,结合哈希映射信息可以快速完整地将编码压缩后的数据恢复到原始的数据。
编码反转的具体过程如算法6所示。
算法6:编码反转算法
输入:哈希编码压缩的Top-k结果子图
输出:编码反转后的Top-k结果子图
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (7)
1.一种基于Storm的实时关键词近似搜索算法,其特征在于:包括分布式存储和Storm实时搜索处理;
所述分布式存储包括以下步骤:
步骤A1:对RDF数据进行预处理;
步骤A2:对预处理后的RDF数据进行数据哈希编码压缩;
步骤A3:将数据哈希编码压缩后的RDF数据存储在Redis分布式数据库中,所述Redis分布式数据库中存储了五类数据,包括本体数据、实例数据、历史数据、哈希映射信息和缓存数据;
所述Storm实时搜索处理包括以下步骤:
步骤B1:输入关键词集合;
步骤B2:根据关键词集合、本体数据、历史数据及哈希映射信息进行关键词映射匹配得到匹配的模式三元组、本体子图及其语义评分或者Top-k结果子图;
步骤B3:根据匹配的模式三元组、关键词集合的真子集对应的本体子图及其语义评分进行本体子图构建排序得到本体子图及其语义评分;
步骤B4:根据本体子图及其语义评分、实例数据及缓存数据进行结果子图构建得到结果子图;
步骤B5:当结果子图中的实例三元组条数未达到预设值k时,根据缓存数据进行近似本体子图构建排序得到近似本体子图及其语义相似度评分;
步骤B6:根据所述近似本体子图及其语义相似度评分进行近似搜索结果子图;
步骤B7:对所述Top-k结果子图进行编码反转;
步骤B8:将编码反转后的Top-k结果子图传给DRPC服务器,并返回Top-k结果子图。
2.根据权利要求1所述的基于Storm的实时关键词近似搜索算法,其特征在于:所述步骤A2中数据哈希编码压缩的具体过程如下:
步骤A21:获取RDF三元组中包含的不同前缀;
步骤A22:遍历获取到的前缀,查看Conflict中是否存在当前访问的前缀,如果存在,则该前缀为冲突前缀,不对该前缀进行哈希编码,保持字符串的格式不变,跳到步骤A27,否则跳到步骤A23;所述Conflict为哈希映射信息的存储方案,存储发生冲突的前缀,其中值为冲突的前缀字符串,其存储结构为Conflict={C1,C2,…,Ci,…,Cn}, Ci=(ConflictPrefix);
步骤A23:查看Prefix_Hash中是否存在以当前访问的前缀为key的记录,如果存在,则跳到步骤A27,否则跳到步骤A24;所述Prefix_Hash为哈希映射信息的存储方案,存储前缀及其哈希值的信息,以键值对的形式存储,其中键为前缀,值为哈希值,其存储结构为Prefix_Hash={PH1,PH2,…,PHi,…,PHn}, PHi=(Prefix =>Hash);
步骤A24:利用BKDRHash算法散列计算生成当前访问前缀对应的哈希值,查看Hash_Prefix中是否存在以该哈希值为key的记录,如果存在,则当前访问的前缀为冲突前缀,跳到步骤A25,否则跳到步骤A26;所述Hash_Prefix为哈希映射信息的存储方案,存储Prefix_Hash的反转备份,以键值对的形式存储,其中键为哈希值,值为前缀,其存储结构为Hash_Prefix={HP1,HP2,…,HPi,…,HPn}, HPi=(Hash =>Prefix);
步骤A25:当前访问的前缀保持字符串的格式不变,并且将其加入Conflict中,跳到步骤A27;
步骤A26:将<当前访问的前缀,哈希值>键值对加入Prefix_Hash,<哈希值,当前访问的前缀>键值对加入Hash_Prefix,跳到步骤A27;
步骤A27:判断所有的前缀是否遍历处理完成,如果遍历处理完成,跳到步骤A28,否则跳到步骤A22;
步骤A28:当全部的前缀都遍历处理完成后,RDF三元组中出现在Conflict中的冲突前缀保持字符串的格式不变,并且将其他的前缀替换成对应的哈希值,跳到步骤A29;
步骤A29:输出哈希编码压缩后的RDF三元组;
步骤A210:数据哈希编码压缩结束。
3.根据权利要求1所述的基于Storm的实时关键词近似搜索算法,其特征在于:所述步骤B2中关键词映射匹配的具体过程如下:
步骤B201:对关键词集合中的关键词进行数据哈希编码压缩;
步骤B202:查看His_Keywords_ReSubGraph中是否存在以当前搜索关键词集合为key的记录,如果存在,则该关键词集合以前搜索过,跳到步骤B203,否则跳到步骤B204;所述His_Keywords_ReSubGraph为历史数据的存储方案,存储历史数据中关键词集合及其对应的结果子图,以键值对的形式存储,其中键为关键词集合,值为对应的结果子图,其存储结构为His_Keywords_ReSubGraph= {KR1,KR2,…,KRi,…,KRn}, KRi=(Keywords=> {ReSubGraph:[]});
步骤B203:查看Data_Change_Record中存储本体数据的数据结构对应的数据量是否发生改变,如果发生改变,则跳到步骤B205,否则跳到步骤B206;所述Data_Change_Record为历史数据的存储方案,存储RDF本体数据和实例数据变化的相关信息,以键值对的形式存储,其中键为数据结构的名称,值为该数据结构中数据变化前的数据量和数据变化后的数据量组合,其存储结构为Data_Change_Record={KV1,KV2,…,KVi,…,KVn},
KVi=(DataName=> {BeforeNum,AfterNum});
步骤B204:查看His_Keywords_ReSubGraph中是否存在以当前搜索关键词集合的真子集为key的记录,如果存在,跳到步骤B207,否则跳到步骤B205;
步骤B205:取出His_Keywords_Inf中关键词匹配的模式三元组,并将不在His_Keywords_Inf中的关键词映射成对应的类或属性,并且搜索得到关键词匹配的模式三元组,跳到步骤B209;所述His_Keywords_Inf为历史数据的存储方案,存储历史数据中关键词及其对应的相关信息,以键值对的形式存储,其中键为关键词,值为所属类型、对应的类或属性以及匹配的模式三元组的组合,其存储结构为His_Keywords_Inf={KI1,KI2,…,KIi,…,KIn},
KIi=(Keyword=>{Type,ClassOrPro:[], OntoTriple:[][]});
步骤B206:查看Data_Change_Record中存储实例数据的数据结构对应的数据量是否发生改变,如果发生改变,则跳到步骤B212,否则跳到步骤B215;
步骤B207:获取His_Keywords_SubGraph中关键词集合真子集对应的本体子图及其对应的语义评分,跳到步骤B208;所述His_Keywords_SubGraph为历史数据的存储方案,存储历史数据中关键词集合对应的本体子图,其中值为本体子图,每个值都会关联对应的语义评分,其存储方案为His_Keywords_SubGraph= {S1,S2,…,Si,…,Sn}, Si=(SubGraph)=>Score;
步骤B208:计算关键词集合和真子集的补集,补集由所有属于关键词集合但不属于真子集的关键词组成,跳到步骤B205;
步骤B209:向Keywords_Inf中写入关键词及其对应的相关信息,跳到步骤B210;所述Keywords_Inf为缓存数据的存储方案,存储当前进行搜索的关键词及其对应的相关信息,以键值对的形式存储,其中键为关键词,值为所属类型、对应的类或属性以及实例的组合,其存储结构为
Keywords_Inf= {KI1,KI2,…,KIi,…,KIn},
KIi=(Keyword=>{Type,ClassOrPro:[], Instance:[][]});
步骤B210:查看His_Keywords_ReSubGraph中是否存在以当前搜索关键词集合的真子集为key的记录,如果存在,跳到步骤B216,否则跳到步骤B211;
步骤B211:输出并传递模式三元组给本体子图构建排序阶段进行处理,跳到步骤B217;
步骤B212:获取His_Keywords_SubGraph中关键词集合对应的本体子图及其对应的语义评分,跳到步骤B213;
步骤B213:将His_Keywords_Inf中当前关键词集合中关键词的相关信息写入Keywords_Inf中,跳到步骤B214;
步骤B214:输出并传递本体子图及其对应的语义评分给结果子图构建阶段进行处理,跳到步骤B217;
步骤B215:获取His_Keywords_ReSubGraph中关键词集合对应的Top-k结果子图,输出并传给编码反转阶段进行处理,跳到步骤B217;
步骤B216:输出并传递本体子图及其语义评分、模式三元组给本体子图构建排序阶段进行处理,跳到步骤B217;
步骤B217:关键词映射匹配结束。
4.根据权利要求1所述的基于Storm的实时关键词近似搜索算法,其特征在于:所述步骤B3中本体子图构建排序的具体过程如下:
步骤B31:对输入的模式三元组进行连接,生成本体子图;
步骤B32:判断是否有输入关键词集合的真子集对应的本体子图及其语义评分,如果有,则跳到步骤B33,否则跳到步骤B34;
步骤B33:将步骤B31生成的本体子图与真子集对应的本体子图进行连接,生成最终的本体子图,跳到步骤B34;
步骤B34:对于生成的多个本体子图,对每个本体子图进行评分;
步骤B35:向SubGraph_Score中写入本体子图及其对应的语义评分;所述SubGraph_Score为缓存数据的存储方案,存储当前进行搜索的关键词集合对应的本体子图,其中值为本体子图,每个值都会关联对应的语义评分,其存储结构为SubGraph_Score= {S1,S2,…,Si,…,Sn}, Si=(SubGraph)=>Score;
步骤B36:输出并传递本体子图及其对应的语义评分给结果子图构建阶段进行处理;
步骤B37:本体子图构建排序结束。
5.根据权利要求3所述的基于Storm的实时关键词近似搜索算法,其特征在于:所述步骤B4中结果子图构建的具体过程如下:
步骤B41:获取实时流入的本体子图及其语义评分,并且按照本体子图的语义评分,从高到低依次将本体子图进行分布式搜索;
步骤B42:获取Keywords_Inf中文本类型关键词对应的实例,组合得到包含数据属性的模式三元组匹配的实例三元组;
步骤B43:获取SC_OP_OC和OC_OP_SC中以实例类型关键词为key的记录,组合得到包含对象属性的模式三元组匹配的实例三元组;所述SC_OP_OC为实例数据的存储方案,存储包含对象属性的模式三元组对应的实例三元组,以键值对的形式存储,其中键为实例三元组的主语,值为实例三元组的宾语,其存储结构为SC_OP_OC={SO1,SO2,…,SOi,…,SOn}, SOi=(Subject =>{Object:[]});所述OC_OP_SC为实例数据的存储方案,存储SC_OP_OC的反转备份,以键值对的形式存储,其中键为实例三元组的宾语,值为实例三元组的主语,OC_OP_SC={OS1,OS2,…,OSi,…,OSn}, OSi=(Object =>{Subject:[]});
步骤B44:获取SC_OP_OC和OC_OP_SC中其他模式三元组匹配的实例三元组;
步骤B45:对匹配的实例三元组进行连接,得到结果子图;
步骤B46:查看结果子图中的实例三元组是否达到k条,如果达到,则跳到步骤B47,否则跳到步骤B49;
步骤B47:将本次关键词搜索过程中存储在缓存数据中的关键词及其相关信息、本体子图及其语义评分、结果子图分别写入历史数据中的His_Keywords_Inf、His_Keywords_SubGraph和His_Keywords_ReSubGraph,跳到步骤B48;
步骤B48:输出并传递结果子图给编码反转阶段进行处理,跳到步骤B410;
步骤B49:进入近似本体子图构建排序阶段,跳到步骤B410;
步骤B410:结果子图构建结束。
6.根据权利要求4所述的基于Storm的实时关键词近似搜索算法,其特征在于:所述步骤B5中近似本体子图构建排序的具体过程如下:
步骤B51:按照本体子图对应的语义评分,从高到低依次从SubGraph_Score中获取对应的本体子图;
步骤B52:对获取得到的本体子图进行扩展,生成对应的近似本体子图;
步骤B53:对于生成的多个近似本体子图,计算每个近似本体子图与原始本体子图的语义相似度评分;
步骤B54:向ApproSubGraph_Score中写入近似本体子图及其对应的语义相似度评分;所述ApproSubGraph_Score为缓存数据的存储方案,存储本体子图对应的近似本体子图,其中值为近似本体子图,每个值都会关联对应的语义相似度评分,其存储结构为ApproSubGraph_Score= {AS1,AS2,…,ASi,…,ASn}, ASi=(ApproSubGraph)=>Score;
步骤B55:输出并传递近似本体子图及其语义相似度评分给近似搜索结果子图阶段进行处理;
步骤B56:近似本体子图构建排序结束。
7.根据权利要求2所述的基于Storm的实时关键词近似搜索算法,其特征在于:所述步骤B7中编码反转的具体过程如下:
步骤B71:获取Top-k结果子图中包含的不同哈希值;
步骤B72:从Hash_Prefix中获取哈希值对应的前缀字符串;
步骤B73:将Top-k结果子图中所有哈希值格式的前缀替换成对应的字符串格式的前缀;
步骤B74:输出并传递编码反转后的Top-k结果子图给DRPC服务器;
步骤B75:编码反转结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710057432.XA CN106874425B (zh) | 2017-01-23 | 2017-01-23 | 基于Storm的实时关键词近似搜索算法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710057432.XA CN106874425B (zh) | 2017-01-23 | 2017-01-23 | 基于Storm的实时关键词近似搜索算法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106874425A CN106874425A (zh) | 2017-06-20 |
CN106874425B true CN106874425B (zh) | 2020-02-07 |
Family
ID=59159281
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710057432.XA Active CN106874425B (zh) | 2017-01-23 | 2017-01-23 | 基于Storm的实时关键词近似搜索算法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106874425B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108509543B (zh) * | 2018-03-20 | 2021-11-02 | 福州大学 | 一种基于Spark Streaming的流式RDF数据多关键词并行搜索方法 |
CN108763451B (zh) * | 2018-05-28 | 2022-03-11 | 福州大学 | 基于Spark Streaming的流式RDF数据并行推理算法 |
CN108762846B (zh) * | 2018-05-30 | 2024-02-09 | 努比亚技术有限公司 | 插件化实时推荐方法、服务器及计算机可读存储介质 |
CN109388657B (zh) * | 2018-09-10 | 2023-08-08 | 平安科技(深圳)有限公司 | 数据处理方法、装置、计算机设备及存储介质 |
CN111026748B (zh) * | 2019-11-05 | 2020-11-17 | 广州市玄武无线科技股份有限公司 | 网络访问频次管控的数据压缩方法、装置及系统 |
CN116257871B (zh) * | 2023-03-13 | 2023-11-17 | 杭州易签宝网络科技有限公司 | 数据存储、存证、验证的方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8620962B1 (en) * | 2012-02-21 | 2013-12-31 | Netapp, Inc. | Systems and methods for hierarchical reference counting via sibling trees |
CN105681397A (zh) * | 2015-12-30 | 2016-06-15 | 曙光信息产业(北京)有限公司 | 一种网络流量数据存储方法及系统、查询方法及装置 |
CN106021457A (zh) * | 2016-05-17 | 2016-10-12 | 福州大学 | 基于关键词的rdf分布式语义搜索方法 |
-
2017
- 2017-01-23 CN CN201710057432.XA patent/CN106874425B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8620962B1 (en) * | 2012-02-21 | 2013-12-31 | Netapp, Inc. | Systems and methods for hierarchical reference counting via sibling trees |
CN105681397A (zh) * | 2015-12-30 | 2016-06-15 | 曙光信息产业(北京)有限公司 | 一种网络流量数据存储方法及系统、查询方法及装置 |
CN106021457A (zh) * | 2016-05-17 | 2016-10-12 | 福州大学 | 基于关键词的rdf分布式语义搜索方法 |
Non-Patent Citations (2)
Title |
---|
Optimization of RDF reasoning based on MapReduce;Qin-zhou Niu et al;《2016 World Automation Congress (WAC)》;20161006;第1-5页 * |
基于索引的分布式RDF查询优化算法;汪璟玢等;《计算机科学》;20141130;第41卷(第11期);第233-238页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106874425A (zh) | 2017-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106874425B (zh) | 基于Storm的实时关键词近似搜索算法 | |
Jose et al. | Exploring the merits of nosql: A study based on mongodb | |
CN108509543B (zh) | 一种基于Spark Streaming的流式RDF数据多关键词并行搜索方法 | |
US8688723B2 (en) | Methods and apparatus using range queries for multi-dimensional data in a database | |
CN107291807B (zh) | 一种基于图遍历的sparql查询优化方法 | |
US9934324B2 (en) | Index structure to accelerate graph traversal | |
US20130262485A1 (en) | High Efficiency Prefix Search Algorithm Supporting Interactive, Fuzzy Search on Geographical Structured Data | |
CN106874426B (zh) | 基于Storm的RDF流式数据关键词实时搜索方法 | |
Hu et al. | Top-k spatio-textual similarity join | |
CN106897374B (zh) | 一种基于轨迹大数据最近邻查询的个性化推荐方法 | |
CN109166615B (zh) | 一种随机森林哈希的医学ct图像存储与检索方法 | |
CN108009265B (zh) | 一种云计算环境下的空间数据索引方法 | |
CN114218400A (zh) | 基于语义的数据湖查询系统及方法 | |
Qi et al. | The min-dist location selection and facility replacement queries | |
CN103678550A (zh) | 一种基于动态索引结构的海量数据实时查询方法 | |
Gu et al. | The rlr-tree: A reinforcement learning based r-tree for spatial data | |
Wang et al. | Efficient computation of g-skyline groups | |
CN115563313A (zh) | 基于知识图谱的文献书籍语义检索系统 | |
Rudolf et al. | SynopSys: large graph analytics in the SAP HANA database through summarization | |
CN113704248B (zh) | 一种基于外置索引的区块链查询优化方法 | |
CN113220820B (zh) | 基于图的高效sparql查询应答方法、装置和设备 | |
Álvarez-García et al. | Compact and efficient representation of general graph databases | |
KR101955376B1 (ko) | 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
Li et al. | Aggregate nearest keyword search in spatial databases | |
Desai et al. | Issues and challenges in big graph modelling for smart city: an extensive survey |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |