1.一种基于MapReduce的最邻近空间集合关键字查询方法,其特征在于,包括如下步骤:步骤1:地图位置对象数据的格式包含:1)数据所包含的关键字;2)数据的经纬度坐标;所有数据存放在HDFS中;步骤2:设置查询关键字,从HDFS的block读取对象数据,对象数据读取过程中,根据对象数据包含的关键字,将符合查询条件的对象数据放在内存中,并根据查询关键字生成该对象数据的keyBit,keyBit是表示对象数据包含关键字的二进制代码;然后序列化HilbertCurve对象,根据HilbertCurve对象的经纬度坐标求出其Hilbert value,建立Hilbert R-树,并将Hilbert R-树传给所有的计算节点;步骤3:叶子节点对角线剪枝方法;步骤3-1:生成一个叶子节点,判断该叶子节点所包含的查询关键字,如果该叶子节点包含所有查询关键字,那么将该叶子节点的对角线距离设置为阈值;步骤3-2:重复步骤3-1,如果新生成的叶子节点包含所有的查询关键字,且对角线距离小于阈值,则用新生成的叶子节点的对角线距离更新阈值,直到所有的叶子节点全部生成完;最终得到的阈值记为 S ;步骤4:圆扫描剪枝方法;遍历所有对象数据,以数据对象为圆心, * S 为直径构建一个圆,判断该圆区域内是否包含所有的查询关键字,如果不包含所有查询关键字,则将该对象数据从对象集合中删除;步骤5:遍历剩余对象数据,采用两点配对法进行对象数据的两两配对,形成对象对;所述两点配对法具体如下:集合空间关键字查询的目标是查找位置最邻近的若干个对象的集合,其中邻近的度量方式采用对象集合的“直径”描述,即使用对象集合中两两距离的最大值作为直径;集合关键字查询就是去查找能够包含所有关键字,并且直径最小的对象集合;首先将对象进行两两组合形成对象对,然后将对象对按距离大小进行升序排列,最后逐一将对象对扩展为对象集合,如果某一个对象对被扩展为对象集合,那么该对象集合即为所求结果;步骤6:运用Hilbert R-树,对象配对方法;步骤6-1:用Hilbert R-树的根节点与自身配对;步骤6-2:对于非叶子节点对,列举所有的子节点对,如果两个节点所对应的矩形的最小距离大于 S ,则忽略该节点对,否则继续进行子节点进行配对;对于叶子节点对,列举所有的对象对;步骤6-3:重复6-2,直到所有的对象对都配对完成;步骤7:如果对象对的距离小于阈值 S ,则将对象对的距离设为key,两个对象数据作为value输出给reduce;步骤8:reduce阶段,对每一个对象对所在的区域内进行扫描,如果能够找到以key为直径的对象集合,则作为候选的输出结果;取距离最小的前十个候选对象进行序列化,输出到对应的文件中。
2.根据权利要求1所述的一种基于MapReduce的最邻近空间集合关键字查询方法,其特征在于,所述叶子节点对角线剪枝方法具体如下:Hilbert R-树的构建采用的是自底向上的方式,首先是生成叶子节点,叶子节点是使用最小外包矩形作为它的空间属性;如果一个叶子节点中包含了所有查询关键字,那么能够在这个叶子节点中找到一个满足所有查询关键字的对象集合,且它的直径小于这个叶子节点的对角线距离,所以该叶子节点的对角线距离即是集合空间关键字查询的结果的上限;在Hilbert R-树生成的时候,对生成的叶子节点进行判定,如果包含所有查询关键字,那么该叶子节点的对角线距离即为结果的上限,之后随着叶子节点的生成,更新该上限值,当所有叶子节点生成完,满足该条件的最小叶子节点的对角线距离即为最小上限;采用这个最小上限作为阈值。