一种Top-k组合空间关键字查询方法和系统与流程

文档序号:18475394发布日期:2019-08-20 20:58阅读:221来源:国知局
一种Top-k组合空间关键字查询方法和系统与流程

本发明属于数据查询技术领域,更具体地,涉及一种top-k组合空间关键字查询方法和系统。



背景技术:

空间关键字查询是空间数据库领域的重要研究问题。组合空间关键字查询是一种重要的空间关键字查询,它综合利用空间邻近性和文本相关性对带有位置和关键字信息的空间对象进行查询处理。随着移动互联网的发展,查找附近美食、预定酒店等许多基于位置的应用服务不断涌现。在现实场景中,给用户提供兴趣匹配的商品排名、为用户提供其感兴趣的饭店或者旅馆等需求都能够通过使用空间关键字查询技术(collectivespatialkeywordquery,简称csk)解决,空间关键字查询技术在基于搜索的服务中具有重要的研究价值。

目前的空间关键字查询方法主要是给定一个规模为n的对象集o以及一个查询点q,对象集中的每个对象和查询点q都拥有一个位置信息q.λ、以及关键字集合该空间关键字查询方法旨在计算出能够覆盖查询点q的关键字组合并且代价cost最小的一组对象。

然而,现有的空间关键字查询方法具有一些不可忽视的技术问题:首先,其针对单个查询关键字,仅仅能够反馈给用户一组查询结果,但在实际应用场景中,用户往往希望得到多组查询结果,并从中选择出与其最感兴趣的服务对应的查询结果,现有查询方法仅仅提供一组查询结果的方式,会影响用户的体验性,从而降低了该空间关键字查询方法的适用性和普及性;其次,该方法使用索引结构进行对象存储,对于实时更新的对象集合而言,索引结构更新的时间开销大。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种top-k组合空间关键字查询方法和系统,其目的在于,通过逐一覆盖关键字选择代价最小的k组对象集合(即查询结果),从而解决现有空间关键字查询方法由于仅仅返回单一的查询结果所导致的用户体验效果差、以及适用性和普及性欠佳的技术问题,以及由于使用索引结构进行对象存储所导致的索引结构更新的时间开销大的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种top-k组合空间关键字查询方法,包括以下步骤:

(1)获取对象集合o,并从用户接收其对应的查询点q,其中对象集合o={o1,o2,…,on},用户的查询点q包括用户所在的位置λ、以及用户的查询关键字集合t={t1,t2,…,tm},其中n表示对象集合中对象的总数,m表示查询关键字集合中查询关键字的总数;

(2)从对象集合o中删除不包括查询关键字集合t中任何一个查询关键字的对象,从而得到更新后的对象集合o;

(3)根据查询关键字集合t中的每个查询关键字将步骤(2)中更新后的对象集合o中的所有对象进行分组,从而形成m个子对象集合p1,p2,…pm,对每个子对象集合中的每个对象,获取该对象与查询点q之间的欧氏距离,并根据获取的每个子对象集合对应的所有欧氏距离按照从小到大的顺序将该子对象集合中的所有对象进行排序,并设置计数器i=1;

(4)从第i个子对象集合pi中的前k个对象a1、a2、…、ak,将每个对象单独放入一个对应的集合s1、s2、…、sk,获取第j个集合的代价cost(s1)、cost(s2)、…、cost(sk),并根据所有集合的代价按照从小到大的顺序将该代价对应的集合进行排序,从而形成第一对象组合集合g={s’1、s’2、…、s’k},并设置计数器r=1,其中k表示用户希望获得的查询结果的数量,其由用户自行设定,j∈[1,k];

(5)设置计数器i=i+1;

(6)选择第i个子对象集合pi中的第一个对象加入第一对象组合集合g中的第r个集合中,形成更新后的集合s’r,获取更新后的的集合s’r的代价cost(sr′),将更新后的集合s’r加入第二对象组合集合g’中,并对第i个子对象集合pi中的所有剩余对象重复本步骤的处理;

(7)设置r=r+1,并判断r是否小于等于k,如果是则进入步骤(8),否则返回步骤(6);

(8)根据第二对象组合集合g’中所有集合的代价按照从小到大的顺序对该代价对应的集合进行排序,从得到的第二对象组合集合g’的排序结果中删除前k个集合之后的所有集合,从而得到更新后的第二对象组合集合g’;

(9)判断计数器i是否等于m,如果是则将第二对象组合集合g’作为查询结果输出给用户,过程结束,否则使用更新后的第二对象组合集合g’替代步骤(6)中的第一对象组合集合g,并返回步骤(5)。

优选地,步骤(4)中获取代价是采用以下公式:

其中b、b1和b2都表示第j个集合中的对象,dis()表示获取括号内两个对象之间的欧氏距离。

优选地,步骤(6)中获取代价是采用以下公式:

其中c、c1和c2都表示更新后的集合s’r中的对象。

按照本发明的另一方面,提供了一种top-k组合空间关键字查询系统,包括:

第一模块,用于获取对象集合o,并从用户接收其对应的查询点q,其中对象集合o={o1,o2,…,on},用户的查询点q包括用户所在的位置λ、以及用户的查询关键字集合t={t1,t2,…,tm},其中n表示对象集合中对象的总数,m表示查询关键字集合中查询关键字的总数;

第二模块,用于从对象集合o中删除不包括查询关键字集合t中任何一个查询关键字的对象,从而得到更新后的对象集合o;

第三模块,用于根据查询关键字集合t中的每个查询关键字将第二模块更新后的对象集合o中的所有对象进行分组,从而形成m个子对象集合p1,p2,…pm,对每个子对象集合中的每个对象,获取该对象与查询点q之间的欧氏距离,并根据获取的每个子对象集合对应的所有欧氏距离按照从小到大的顺序将该子对象集合中的所有对象进行排序,并设置计数器i=1;

第四模块,用于从第i个子对象集合pi中的前k个对象a1、a2、…、ak,将每个对象单独放入一个对应的集合s1、s2、…、sk,获取第j个集合的代价cost(s1)、cost(s2)、…、cost(sk),并根据所有集合的代价按照从小到大的顺序将该代价对应的集合进行排序,从而形成第一对象组合集合g={s’1、s’2、…、s’k},并设置计数器r=1,其中k表示用户希望获得的查询结果的数量,其由用户自行设定,j∈[1,k];

第五模块,用于设置计数器i=i+1;

第六模块,用于选择第i个子对象集合pi中的第一个对象加入第一对象组合集合g中的第r个集合中,形成更新后的集合s’r,获取更新后的的集合s’r的代价cost(sr′),将更新后的集合s’r加入第二对象组合集合g’中,并对第i个子对象集合pi中的所有剩余对象重复本步骤的处理;

第七模块,用于设置r=r+1,并判断r是否小于等于k,如果是则进入第八模块,否则返回第六模块;

第八模块,用于根据第二对象组合集合g’中所有集合的代价按照从小到大的顺序对该代价对应的集合进行排序,从得到的第二对象组合集合g’的排序结果中删除前k个集合之后的所有集合,从而得到更新后的第二对象组合集合g’;

第九模块,用于判断计数器i是否等于m,如果是则将第二对象组合集合g’作为查询结果输出给用户,过程结束,否则使用更新后的第二对象组合集合g’替代第六模块中的第一对象组合集合g,并返回第五模块。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

(1)由于本发明在关键字覆盖的过程、以及对象选取的过程中始终维持有k组结果集合,所以本发明能够实现最终输出k组查询结果供用户选择,从而提升了用户的体验性;

(2)由于本发明克服了空间关键字查询方法中仅仅输出一组查询结果的缺陷,提供了可控制的查询结果规模,从而使得本发明的方法具有更好的适用性和普及性;

(3)由于本发明使用无索引结构进行对象存储,对于处理实时更新的对象数据集,无需花费太多时间维护对象存储的结构,从而节省了时间开销。

附图说明

图1是本发明top-k组合空间关键字查询方法的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

如图1所示,本发明提供了一种top-k组合空间关键字查询(top-kcollectivespatialkeywordquery,简称tkcoskq)方法,其包括以下步骤:

(1)获取对象集合o,并从用户接收其对应的查询点q,其中对象集合o={o1,o2,…,on},用户的查询点q包括用户所在的位置λ、以及用户的查询关键字集合t={t1,t2,…,tm},其中n表示对象集合中对象的总数,m表示查询关键字集合中查询关键字的总数;

具体而言,对象集合o是通过网络爬取的方式获取的数据集。

对象集合o中的每个对象都包括至少一个关键字,下表1示出了一个例子:

表1

(2)从对象集合o中删除不包括查询关键字集合t中任何一个查询关键字的对象,从而得到更新后的对象集合o;

举例而言,针对上表1中的对象集合o={o1,o2,…,o8},假设关键字集合是{t3,t6},对象集合中的对象o1和o8都不包括t3或t6,则本步骤中,会将对象集o中没有包含t3,或t6的对象,即o1和o8移除,那么更新后的对象集合o={o2,o3,o4,o5,o6,o7};

(3)根据查询关键字集合t中的每个查询关键字将步骤(2)中更新后的对象集合o中的所有对象进行分组,从而形成m个子对象集合p1,p2,…pm,对每个子对象集合中的每个对象,获取该对象与查询点q之间的欧氏距离,并根据获取的每个子对象集合对应的所有欧氏距离按照从小到大的顺序将该子对象集合中的所有对象进行排序,并设置计数器i=1;

本步骤就是将更新后的对象集合o中包含同一个查询关键字的对象分为一组。

针对上述步骤(2)中举的例子,由于关键字集合是{t3,t6},因此本步骤能够将更新后的对象集合o分成2个子对象集合p1和p2,在对每个子对象集合中的所有对象按照上述过程进行排序后,得到p1={o2,o4,o6},p2={o3,o5,o7};

(4)从第i个子对象集合pi中的前k个对象a1、a2、…、ak,将每个对象单独放入一个对应的集合s1、s2、…、sk,根据以下公式计算第j个集合的代价cost(s1)、cost(s2)、…、cost(sk),并根据所有集合的代价按照从小到大的顺序将该代价对应的集合进行排序,从而形成第一对象组合集合g={s’1、s’2、…、s’k},并设置计数器r=1,其中k表示用户希望获得的查询结果的数量,其由用户自行设定,j∈[1,k];

其中b、b1和b2都表示第j个集合中的对象,dis()表示获取括号内两个对象之间的欧氏距离。

(5)设置计数器i=i+1;

(6)选择第i个子对象集合pi中的第一个对象加入第一对象组合集合g中的第r个集合中,形成更新后的集合s’r,根据以下公式计算更新后的的集合s’r的代价cost(sr′),将更新后的集合s’r加入第二对象组合集合g’中,并对第i个子对象集合pi中的所有剩余对象重复本步骤的处理;

其中c、c1和c2都表示更新后的集合s’r中的对象。

(7)设置r=r+1,并判断r是否小于等于k,如果是则进入步骤(8),否则返回步骤(6);

(8)根据第二对象组合集合g’中所有集合的代价按照从小到大的顺序对该代价对应的集合进行排序,从得到的第二对象组合集合g’的排序结果中删除前k个集合之后的所有集合,从而得到更新后的第二对象组合集合g’;

(9)判断计数器i是否等于m,如果是则将第二对象组合集合g’作为查询结果输出给用户,过程结束,否则使用更新后的第二对象组合集合g’替代步骤(6)中的第一对象组合集合g,并返回步骤(5)。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1