CN114461638A - 位置索引构建方法、用户确定方法、装置、介质及设备 - Google Patents
位置索引构建方法、用户确定方法、装置、介质及设备 Download PDFInfo
- Publication number
- CN114461638A CN114461638A CN202210038447.2A CN202210038447A CN114461638A CN 114461638 A CN114461638 A CN 114461638A CN 202210038447 A CN202210038447 A CN 202210038447A CN 114461638 A CN114461638 A CN 114461638A
- Authority
- CN
- China
- Prior art keywords
- user
- user identification
- prefix
- node
- position range
- 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.)
- Pending
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- 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/29—Geographical information databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Remote Sensing (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开的实施方式提供了一种位置索引构建方法、用户确定方法、装置、介质及设备。位置的经纬度可以被转换成一种特殊结构的位置编码,这种特殊结构的位置编码具有这样的性质:两个位置的经纬度越接近,这两个位置的位置编码就共享越多位数的编码前缀。利用这一性质,可以将各个用户分别所在的位置的经纬度转换成i位编码前缀。可以将对应于相同的编码前缀的用户标识形成一个用户标识集合,基于一个编码前缀以及对应的一个用户标识集合,得到一个索引记录,完成位置索引的构建。
Description
技术领域
本公开的实施方式涉及信息技术领域,更具体地,本公开的实施方式涉及一种位置索引构建方法、用户确定方法、装置、介质及设备。
背景技术
位置索引也称地理位置索引,通常包含若干位置范围信息以及位于每个位置范围内的若干用户的用户标识,换言之,位置索引中的一个索引记录可以理解为一个位置范围与一个用户集合之间的对应关系。需要说明的是,一个位置范围通常包括经度范围与维度范围。
在一些业务场景(例如同城社交)下,可以利用根据目标位置范围与上述的位置索引进行用户检索,以便确定位于目标位置范围内的用户。
基于以上,需要一种能够提升检索效率的位置索引。
发明内容
在本上下文中,本公开的实施方式期望提供一种位置索引构建方法、用户确定方法、装置、介质及设备,以便提供一种能够提升检索效率的位置索引。
在本公开实施方式的第一方面中,提供一种位置索引构建方法,包括:
将各个用户分别所在的位置的经纬度转换成相应的位置编码的i位编码前缀,i=1、…、M,M>0;其中,两个位置分别对应的位置编码的相同编码前缀的位数,正相关于这两个位置的接近程度;
基于各个用户的用户标识,确定若干用户标识集合;其中,同一用户标识集合中的各个用户标识对应于相同的编码前缀;
基于每个用户标识集合与该用户标识集合对应的编码前缀,构建一个索引记录,得到包含若干索引记录的位置索引。
在一些实施例中,将各个用户分别所在的位置的经纬度转换成相应的位置编码的i位编码前缀,包括:
基于Geohash算法,将各个用户标识分别对应的位置的经纬度转换成相应的位置编码的i位编码前缀。
在一些实施例中,基于每个用户标识集合与该用户标识集合对应的编码前缀,构建一个索引记录,包括:
基于每个用户标识集合、该用户标识集合对应的编码前缀、该用户标识集合中每个用户标识,构建一个索引记录。
在一些实施例中,还包括:
若监测到任一用户所在的位置更新,则在更新后的位置对应的编码前缀不为该用户对应的用户标识集合所对应的编码前缀的情况下,将该用户的用户标识移出该用户标识集合,将该用户的用户标识添加至更新后的位置对应的编码前缀所对应的用户标识集合。
在本公开实施方式的第二方面中,提供一种基于第一方面方法中所述的位置索引的用户确定方法,所述用户确定方法用于确定位于目标位置范围内的用户;
其中,以树结构表示位置编码结构,树结构中从根节点出发的每个路径中的第j个节点的编码为相应的M位编码前缀的前j-1位编码,j=2、…、M+1;
将根节点入栈,并执行以下第一流程:
判断栈是否为空;若是,则结束所述第一流程;若否,则执行以下第二流程:
确定当前栈顶节点,判断当前栈顶节点是否有未被选择过的子节点;若否,则将栈顶节点出栈,之后重新开始所述第一流程;若是,则选择栈顶节点的未被选择过的一个子节点,比较该子节点的编码所表示的位置范围与所述目标位置范围;
若该子节点所表示的位置范围包含于所述目标位置范围,则确定该子节点符合检索要求,并重新开始所述第二流程;
在结束所述第一流程之后,将所有符合检索要求的子节点对应的用户标识集合合并,得到用户标识总集合;
基于所述用户标识总集合,确定位于目标位置范围内的用户。
在一些实施例中,所述第二流程还包括如下步骤:
在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围包含所述目标位置范围,则将该子节点入栈,之后重新开始所述第二流程。
在一些实施例中,所述第二流程还包括如下步骤:
在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围与所述目标位置范围相交,则将该子节点入栈,之后重新开始所述第二流程。
在一些实施例中,所述第二流程还包括如下步骤:
在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围与所述目标位置范围无交集,则重新开始所述第二流程。
在一些实施例中,在判断当前栈顶节点是否有未被选择过的子节点之前,所述第二流程还包括:
判断在树结构中栈顶节点与根节点之间的层级差是否小于预设差值,若否,则将栈顶节点出栈,之后重新开始所述第一流程。
在一些实施例中,其中:
所述目标位置范围与所述预设差值负相关。
在一些实施例中,所述目标位置范围的确定步骤包括:
获取目标用户所在的位置的经纬度;
以目标用户所在的位置的经纬度为圆心,构建具有目标半径的圆形位置范围,作为目标位置范围;
所述方法还包括:
将位于目标位置范围内的用户推荐给所述目标用户。
在一些实施例中,将位于目标位置范围内的用户推荐给所述目标用户,包括:
从位置索引中读取位于目标位置范围内的每个用户对应的经纬度;
根据位于目标位置范围内的每个用户对应的经纬度与目标用户所在位置的经纬度之间的距离,按照预设顺序对位于目标位置范围内的每个用户进行排序;
将排序后的若干用户推荐给所述目标用户。
在本公开实施方式的第三方面中,提供一种位置索引构建装置,包括:
转换模块,将各个用户分别所在的位置的经纬度转换成相应的位置编码的i位编码前缀,i=1、…、M,M>0;其中,两个位置分别对应的位置编码的相同编码前缀的位数,正相关于这两个位置的接近程度;
确定模块,基于各个用户的用户标识,确定若干用户标识集合;其中,同一用户标识集合中的各个用户标识对应于相同的编码前缀;
构建模块,基于每个用户标识集合与该用户标识集合对应的编码前缀,构建一个索引记录,得到包含若干索引记录的位置索引。
在本公开实施方式的第四方面中,提供一种基于第一方面所述方法构建的位置索引的用户确定装置,所述用户确定装置用于确定位于目标位置范围内的用户;
其中,以树结构表示位置编码结构,树结构中从根节点出发的每个路径中的第j个节点的编码为相应的M位编码前缀的前j-1位编码,j=2、…、M+1;所述装置包括执行模块,用于执行以下步骤:
将根节点入栈,并执行以下第一流程:
判断栈是否为空;若是,则结束所述第一流程;若否,则执行以下第二流程:
确定当前栈顶节点,判断当前栈顶节点是否有未被选择过的子节点;若否,则将栈顶节点出栈,之后重新开始所述第一流程;若是,则选择栈顶节点的未被选择过的一个子节点,比较该子节点的编码所表示的位置范围与所述目标位置范围;
若该子节点所表示的位置范围包含于所述目标位置范围,则确定该子节点符合检索要求,并重新开始所述第二流程;
在结束所述第一流程之后,将所有符合检索要求的子节点对应的用户标识集合合并,得到用户标识总集合;
基于所述用户标识总集合,确定位于目标位置范围内的用户。
在本公开实施方式的第五方面中,提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现第一方面或第二方面所述的方法。
在本公开实施方式的第六方面中,提供一种计算设备,包括存储器、处理器;所述存储器用于存储可在处理器上运行的计算机指令,所述处理器用于在执行所述计算机指令时实现第一方面或第二方面所述的方法。
在本公开提供的上述技术方案中,位置的经纬度可以被转换成一种特殊结构的位置编码,这种特殊结构的位置编码具有这样的性质:两个位置的经纬度越接近,这两个位置的位置编码就共享越多位数的编码前缀。利用这一性质,可以将各个用户分别所在的位置的经纬度转换成i位编码前缀,i是变量,其取值依次为1、…、M,M大于0即可。
可以将对应于相同的编码前缀的用户标识形成一个用户标识集合,基于一个编码前缀以及对应的一个用户标识集合,得到一个索引记录,完成位置索引的构建。
通过上述技术方案,可以提供一种有助于提升检索效率的位置索引。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
图1示例性提供一种位置索引构建方法的流程;
图2示例性展示不同长度的Geohash编码前缀对应的经纬度区域;
图3示例性提供一种树结构;
图4示例性提供一种用户确定方法的流程;
图5示例性提供另一种用户确定方法的流程;
图6a-图6b示例性提供一种比对目标位置范围与位置索引中编码前缀对应的位置范围的过程;
图7示例性提供一种位置索引构建装置;
图8示例性提供一种用户确定装置;
图9示例性提供一种计算机可读存储介质;
图10示例性提供一种计算设备的结构示意图。
在附图中,相同或对应的标号表示相同或对应的部分。附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。本公开所涉及的数据可以为经用户授权或者经过各方充分授权的数据。
根据本公开的实施方式,提出了一种位置索引构建方法、装置、介质及设备。
常见的位置索引中的索引记录通常包括用于记录经纬度范围的字段与用于记录用户标识集合(表明位于该经纬度范围内的用户)的字段,其中,用于记录经纬度范围的字段可以具体是一个字段,该字段的字段值是经度范围与维度范围。或者,用于记录位置范围的字段可以具体包括两个字段,一个是经度范围字段,相应的字段值是经度范围,另一个是维度范围字段,相应的字段值是维度范围。而用于记录用户标识集合的字段通常是一个字段,其字段值是用户标识集合。
在一些业务场景下,需要根据指定的目标位置范围,从位置索引中检索出位于目标位置范围内的用户的用户标识。例如,同城社交场景下,以待推荐附近好友的用户所处的位置向附近延伸一定范围,得到目标位置范围,然后从位置索引检索位于用户位置范围内的用户的用户标识,为用户进行附近好友推荐。
基于目标位置范围从上述的位置索引中检索用户标识的具体步骤通常包括:一方面从位置索引中确定出包含匹配于目标位置范围的经度范围的全部索引记录,另一方面从位置索引中确定出包含匹配于目标位置范围的维度范围的全部索引记录,然后,将确定出的全部索引记录取交集,得到匹配于目标位置范围的索引记录,将这些索引记录中的用户标识集合确定为检索结果。
可以发现,上述检索步骤中不仅需要遍历位置索引中的所有索引记录,而且对于其中的一些索引记录需要遍历两次,这比较耗费时间,降低检索效率。上述检索步骤中还需要执行对确定出的全部索引记录中的用户标识集合取交集的操作,这也会耗费一定时间,进一步降低检索效率。
为此,在本公开提供的一个或多个实施例中,不再基于经纬度范围构建索引记录,而是基于特殊结构的位置编码构建索引记录。
具体而言,位置的经纬度可以被转换成一种特殊结构的位置编码,这种特殊结构的位置编码具有这样的性质:两个位置的经纬度越接近,这两个位置的位置编码就共享越多位数的编码前缀。利用这一性质,可以将各个用户分别所在的位置的经纬度转换成i位编码前缀,i是变量,其取值依次为1、…、M,M大于0即可。可以将对应于相同的编码前缀的用户标识形成一个用户标识集合,基于一个编码前缀以及对应的一个用户标识集合,得到一个索引记录,完成位置索引的构建。
如此一来,不必再依赖于经纬度范围来为目标位置范围匹配索引记录,也就不会两次遍历同一索引记录,更免去了执行大量索引记录中的用户标识集合取交集的操作,这可以提升检索效率。
下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
图1示例性提供一种位置索引构建方法的流程,包括以下步骤:
S100:将各个用户分别所在的位置的经纬度转换成相应的位置编码的i位编码前缀。
本公开对于图1所示方法的执行主体不做特定限制。作为一种示例,图1所示方法的执行主体可以是需要基于位置索引进行用户标识检索业务的业务系统。后文为了描述的方便,姑且将业务系统作为图1所示方法的执行主体。
参与位置索引构建的各个用户可以根据实际需要进行指定。作为一种示例,可以将业务系统上注册的全部用户作为参与位置索引构建的各个用户。
可以获取各个用户分别所在的位置的经纬度。可以根据实际需要设定获取一定的精度的经纬度,例如,可以获取精确到小数点后6位的经纬度,假设某个用户所在位置的经纬度为(116.410234°,39.980316°),116.410234°是经度,39.980316°是维度。
由于用户所在的位置可能是动态变化的,因此,所获取的用户所在的位置的经纬度,其实是指在执行步骤S100的时间点,用户此时所在的位置的经纬度。也容易理解,可以定时或不定时执行步骤S100,重新获取各个用户当前最新位置的经纬度。
获取用户所在位置的经纬度的方式有很多。例如,业务系统可以获取用户的移动便携设备上传的当前位置信息,该当前位置信息包括经纬度,是该移动便携设备利用GPS进行定位得到的。又如,用户可以定时或不定时地,主动将自己当前所在的位置的经纬度上报给业务系统。
经纬度可以被转换成特定结构的位置编码,本公开将这种位置编码的性质定义如下:两个位置的经纬度越接近,这两个位置的位置编码就共享越多位数的编码前缀。
如此,可以将每个用户所在的位置的经纬度直接转换成相应位置编码的i位编码前缀,i=1、2、……、M,M>0。I位编码前缀,可以理解为位置编码的前i位编码。
此处需要说明,i是变量,i需要依次等于其所有可能的取值。换言之,假设每个用户所在的位置的经纬度可以被转换成N位位置编码,N≥M,那么步骤S100实际上是获取每个用户对应的N位位置编码的1位编码前缀、2位编码前缀、……、M位编码前缀。
将经纬度转换成特定结构的位置编码的算法有多种,换言之,凡是能够将经纬度转换成上述所定义的性质的位置编码的算法,皆可以应用于本公开所提供的技术方案。例如,可以基于Geohash算法,将各个用户标识分别对应的位置的经纬度转换成相应的位置编码的i位编码前缀。又如,可以基于四叉树空间索引算法,将各个用户标识分别对应的位置的经纬度转换成相应的位置编码的i位编码前缀。
以下提供一种基于Geohash算法将经纬度转换成编码前缀的示例。
Geohash是由Gustavo Niemeyer和G.M.Morton于2008年发明的公共区域地理编码系统,它将地理位置编码为一个由字母和数字组成的短字符串。Geohash是一种分层空间数据结构,它将空间细分为网格形状的桶,用Z阶曲线填充通常空间。Geohash编码也可以称为Geohash序列,其可以表示任意精度,并且有逐渐从代码末尾删除字符以逐渐失去精度的属性。Geohash方法保证两个Geohash序列之间的共享前缀越长,它们在空间上就越接近。
一个Geohash编码表示一个从高位到低位依次表示区间范围从大到小的矩形区域,截取的编码前缀越长(即i越接近N)则表示的范围越小,说明截取的编码前缀所表示的位置越接近用户实际所在的位置点,截取的编码前缀的精度也就越高。
图2示例性展示不同长度的Geohash编码前缀对应的经纬度区域。沿用前文的举例,用户实际所在的位置的经纬度为(116.410234°,39.980316°),对应的1位编码前缀为w,对应的2位编码前缀为wx,对应的3位编码前缀为wx4,对应的4位编码前缀为wx4g,可以看到,随着编码前缀越来越长,所对应的经纬度区域越来越小,精度越来越高。
可以根据实际需要设定编码前缀的精度,也就是设定M的值。M越接近N,说明能够截取的最长编码前缀的精度越高。在上述示例中,将M设定为4。
此处示例性介绍如何将经纬度(116.410234°,39.980316°)转换成4位编码前缀wx4g:
地球纬度区间为[-90°,90°],可以将[-90°,90°]进行二分为[-90°,0°)和[0°,90°],分别称为0区间和1区间,可以确定维度39.980316°属于1区间[0°,90°],二进制序列第一位标记为1。
继续将区间[0°,90°]进行二分为[0°,45°),[45°,90°],可以确定39.928167°属于0区间[0°,45°),二进制序列第二位标记为0。
递归上述过程,因为39.980316°总是属于某个区间[a,b]。随着每次迭代区间[a,b]总在缩小,并越来越逼近39.980316°。这样进行十次迭代会产生一个纬度序列1011100011,序列的长度与给定的区间划分次数有关。
类似的,地球经度区间为[-180°,180°],也可以将经度116.410234°在[-180°,180°]中划分,这样进行十次迭代会产生一个经度序列11010 01011。
也就是说,经纬度(116.410234°,39.980316°)被转换成了(11010 01011,1011100011)。将经纬度的二进制数进行交叉组合,在组合后的序列中经度对应的数字占奇数位,纬度对应的数字占偶数位。二进制序列(11010 01011,10111 00011)进行组合后即为1110011101 00100 01111。
将11100 11101 00100 01111每连续5位数字划分为一段(共4段),从Base32编码表中随机去掉4个字母(例如a、i、l、o),基于Base32编码表中剩余的32个数字(0-9)和字母(b-z),将每段数字转换成Base32编码,如此将11100 11101 00100 01111转换成Geohash编码的4位编码前缀wx4g。此外,也可以其他编码表(例如Base16编码表)进行编码,原理类似,不再赘述。
S102:基于各个用户的用户标识,确定若干用户标识集合。
在步骤S102中,同一用户标识集合中的各个用户标识对应于相同的编码前缀。容易理解,i位编码前缀中的i取值越大,意味着编码前缀越长精度越高,也就意味着该编码前缀所对应的经纬度区域越小,位于该经纬度区域的用户越少,对应的用户标识集合中的用户标识数量越少。
也容易理解,不同位数的编码前缀之间共享至少1位相同前缀,例如wx4g与wx4共享3位前缀“wx4”,存在于wx4g对应的用户标识集合中的用户标识,也必然存在于wx4所对应的用户标识集合。又如,w、wx、wx4和wx4g共享前缀1位“w”,存在于wx4g对应的用户标识集合中的用户标识,也必然存在于w、wx、wx4所对应的用户标识集合。
S104:基于每个用户标识集合与该用户标识集合对应的编码前缀,构建一个索引记录,得到包含若干索引记录的位置索引。
可以针对转换出的每个编码前缀,创建一个索引记录,该索引记录可以包括位置范围字段与用户标识集合字段,位置范围字段的值可以是该编码前缀,用户标识集合字段的值可以是该编码前缀对应的用户标识集合。
在一些实施例中,也可以基于每个用户标识集合、该用户标识集合对应的编码前缀、该用户标识集合中每个用户标识,构建一个索引记录。此外,在一个索引记录中,也可以将该索引记录所包含的每个用户标识的用户所在的位置的经纬度,也加入该索引记录中。
另外,在一些实施例中,可以定时或不定时执行图1所示方法,重新构建符合各个用户当前最新位置的位置索引。
在另一些实施例中,可以不需要重新构建位置索引,而是对已有的位置索引进行更新,具体而言,若监测到任一用户所在的位置更新,则可以在更新后的位置对应的编码前缀不为该用户对应的用户标识集合所对应的编码前缀的情况下,将该用户的用户标识移出该用户标识集合,将该用户的用户标识添加至更新后的位置对应的编码前缀所对应的用户标识集合。
基于图1所示方法构建的位置索引进行用户标识检索的实施例中,可以获取目标位置范围,从位置索引中检索出位于目标位置范围内的用户的用户标识。
在一些实施例中,可以遍历位置索引中的各个索引记录,将目标位置范围与每个索引记录中的编码前缀对应的位置范围进行对比,如果目标位置范围包含该编码前缀对应的位置范围,则将该编码前缀对应的用户标识集合取出,然后,将所有取出的用户标识集合取并集,作为检索结果。
可见,上述方式仅仅需要对位置索引进行一次遍历,并且不会涉及对不同的用户标识集合取交集(取交集操作的复杂性显著大于取并集操作)的操作,可以显著提升检索效率。
需要说明的是,在同城社交场景下,需要向目标用户推荐附近好友,因此需要从索引记录中检索用户标识,作为推荐的好友标识。上述的目标位置范围可以是根据目标用户所在的位置的经纬度向附近扩展所得到的区域范围。例如,可以以目标用户所在的位置的经纬度为圆心,构建具有目标半径的圆形位置范围,作为目标位置范围。
在从位置索引中检索出位于目标位置范围内的用户标识之后,可以从位置索引中读取位于目标位置范围内的每个用户对应的经纬度;根据位于目标位置范围内的每个用户对应的经纬度与目标用户所在位置的经纬度之间的距离,按照预设顺序对位于目标位置范围内的每个用户进行排序;将排序后的若干用户推荐给所述目标用户。
此外,本公开还提供另一种基于图1所示方法构建的索引记录的检索方式,这种检索方式更加高效。这种检索方式实际上是一种用户确定方法,用于确定位于目标位置范围内的用户。
可以以树结构表示位置编码结构,树结构中从根节点出发的每个路径中的第j个节点的编码为相应的M位编码前缀的前j-1位编码,j=2、…、M+1。
此处的每个路径可以理解为从根节点出发抵达叶子节点的所有可能路径。
容易理解,假设在步骤S100中所转换出的编码前缀的最长长度为M位,那么,树结构可以包括M+1层,第1层是根节点,其他M层分别对应于1位编码前缀、2位编码前缀、……、M位编码前缀。
每个路径是由根节点、第2层中的一个节点、……、第M+1层中的一个节点依次连接而成。在树结构中,不同路径对应于索引记录中不同的M位编码前缀。在一个路径中,第1个节点即是根节点,引入变量j,j=2、…、M+1,也就是说,第j个节点的编码为该路径所对应的M位编码前缀的前j-1位编码。
如此一来,树结构中除根节点之外的各个节点与索引记录中的各个编码前缀(索引记录中1至M位的所有编码前缀)一一对应,并且,具有至少一位共享前缀的编码前缀的节点位于同一路径上。
图3示例性提供一种树结构。图3所示的树结构并不是用于表示位置编码结构的树结构的全貌,但是在此处可以用于说明一条路径。假设M取4,则图3中的树结构最多具有5层,其中第1层仅包括根节点。图3中的实线所标示出的路径包括:根节点-w-wx-wx2-wx2z。
需要说明的是,上述的树结构只是用于表示位置编码结构,这并不意味着在实际执行检索之前就一定需要构建出树结构的全貌。换言之,可以认为上述的树结构是对位置编码结构的具象表达,可以方便读者理解位置编码结构,但是在业务系统实际执行检索时,不一定需要利用树结构实现检索逻辑。
退一步讲,即便业务系统需要利用树结构实现检索逻辑,也可以不预先构建树结构的全貌,而是从根节点开始逐层探索,在探索的过程中逐渐构建树结构中的节点,在构建节点的过程中完成检索。容易理解,这样的检索逻辑在完成时,也并不会构建出上述所定义的树结构的全貌,而是构建出如图3所示的树结构的实线部分,虚线部分其实并不需要构建。下文介绍这种检索逻辑。
图4示例性提供一种用户确定方法的流程,包括以下步骤:
S4:将根节点入栈,并执行第一流程的步骤S41。
S41:判断栈是否为空,若是,则执行S411,若否,则执行第二流程的步骤S412。
S411:结束第一流程,之后执行S42。
S412:确定当前栈顶节点,判断当前栈顶节点是否有未被选择过的子节点,若否,则执行S4121,若是,则执行S4122。
S4121:将栈顶节点出栈,之后返回S41。
S4122:选择栈顶节点的未被选择过的一个子节点,比较该子节点的编码所表示的位置范围与所述目标位置范围。
S4123:若该子节点所表示的位置范围包含于所述目标位置范围,则确定该子节点符合检索要求,并返回S412。
S42:将所有符合检索要求的子节点对应的用户标识集合合并,得到用户标识总集合。
S43:基于所述用户标识总集合,确定位于目标位置范围内的用户。
容易理解,栈结构具有先进后出的性质。
在一些实施例中,第二流程还包括:在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围包含所述目标位置范围,则将该子节点入栈,之后重新开始所述第二流程。
在一些实施例中,第二流程还包括:在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围与所述目标位置范围相交,则将该子节点入栈,之后重新开始所述第二流程。
在一些实施例中,第二流程还包括:在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围与所述目标位置范围无交集,则重新开始所述第二流程。
将这些实施例合并,可以得到一个整体实施例。图5示例性提供另一种用户确定方法的流程,包括以下步骤:
S5:将根节点入栈,并执行第一流程的步骤S51。
S51:判断栈是否为空,若是,则执行S511,若否,则执行第二流程的步骤S512。
S511:结束第一流程,之后执行S5。
S512:确定当前栈顶节点,判断当前栈顶节点是否有未被选择过的子节点,若否,则执行S5121,若是,则执行S5122。
S5121:将栈顶节点出栈,之后返回S51。
S5122:选择栈顶节点的未被选择过的一个子节点,比较该子节点的编码所表示的位置范围与所述目标位置范围。
S5123:若该子节点所表示的位置范围包含于所述目标位置范围,则确定该子节点符合检索要求,并返回S512。
S5124:若该子节点所表示的位置范围包含所述目标位置范围,则将该子节点入栈,并返回S512。
S5125:若该子节点所表示的位置范围与所述目标位置范围相交,则将该子节点入栈,并返回S512。
S5126:若该子节点所表示的位置范围与所述目标位置范围无交集,则返回S512。
S52:将所有符合检索要求的子节点对应的用户标识集合合并,得到用户标识总集合。
S53:基于所述用户标识总集合,确定位于目标位置范围内的用户。
图5所示方法流程所采用的检索逻辑,实际上采用了深度优先算法,如果某个编码前缀对应的位置范围完全包含于目标位置范围,则可以不必再探索该编码前缀对应的节点的子节点。也就是说,只需要从位置索引中读取该编码前缀对应的索引记录,将相应的用户标识集合取出,而不需要读取在该编码前缀的基础上长度更长的其他编码前缀对应的索引记录。
如果某个编码前缀对应的位置范围与目标位置范围相交,或者包含目标位置范围(大于目标位置范围),则说明该编码前缀对应的位置范围中存在部分不位于目标位置范围的用户,因此,需要进一步探索该编码前缀对应的节点的子节点。也就是说,可以提升读取精度,进一步读取在该编码前缀的基础上长度更长的其他编码前缀(该其他编码前缀需要与目标位置范围有重合部分)对应的索引记录。
如果某个编码前缀对应的位置范围与目标位置范围没有交集,则意味着不需要从位置索引中读取该编码前缀对应的索引记录,这些没有交集的编码前缀所对应的节点,即是图3中所示的被“剪枝”的虚线框节点,被“剪枝”的节点的更下层节点也不需要再被探索。
综上可见,通过图5所示方法中的步骤S51,可以确定出需要从位置索引中读取的部分索引记录,并不需要遍历读取位置索引中的全部索引记录,从而进一步提升检索效率。
为了更好的理解图5所示的方法,图6a-图6b示例性提供一种比对目标位置范围与位置索引中编码前缀对应的位置范围的过程。如图6a所示,目标位置范围为以目标用户为圆心向周围扩展一定半径得到的圆形区域,而树结构中每一层的各个节点对应的位置范围为矩形区域。圆形区域与同一层的各个矩形区域的关系可以包括不相交、相交、圆形区域完全包含矩形区域、矩形区域完全包含圆形区域(图6a中未示出该情况)等情况。
参见图6b,对于上一层的某个节点对应的矩形区域,其内部又可以进一步划分若干矩形区域(即该节点的各个子节点分别对应的矩形区域)。对于上一层中与圆形区域相交的矩形区域,进一步探索其内部的矩形区域(即进一步探索下一层子节点),并判断圆形区域与下一层的矩形区域的关系,如此迭代。
另外,对于图4所示方法或者图5所示方法来说,在判断当前栈顶节点是否有未被选择过的子节点之前,第二流程还包括:判断在树结构中栈顶节点与根节点之间的层级差是否小于预设差值,若否,则将栈顶节点出栈,之后重新开始所述第一流程。
容易理解,探索树结构的深度越深,编码前缀的位数越多,确定的匹配于目标位置范围的位置索引中的位置范围越小,检索精度也越高。然而,检索精度高,意味着从位置索引中需要读取的索引记录的数量较多,因此,为了平衡检索效率与检索精度,可以限定探索树结构的最大深度。
进一步地,目标位置范围可以与预设差值负相关。也就是说,对于更大的目标位置范围,可以设定较低的探索深度。
举例来说,如果目标位置范围的半径大于500KM,则可以限定从根节点开始最多探索2层树结构,也就是说,从位置索引中读取的索引记录所包含的位置编码前缀不能超过2位,这种情况下预设差值为2。如果目标位置范围的半径位于100KM至500KM之间,则可以限定从根节点开始最多探索3层树结构,也就是说,从位置索引中读取的索引记录所包含的位置编码前缀不能超过3位,这种情况下预设差值为3。如果目标位置范围的半径小于100KM,则可以限定最多探索4层树结构,也就是说,从位置索引中读取的索引记录所包含的位置编码前缀不能超过4位,这种情况下预设差值为4。
图7示例性提供一种位置索引构建装置,包括:
转换模块701,将各个用户分别所在的位置的经纬度转换成相应的位置编码的i位编码前缀,i=1、…、M,M>0;其中,两个位置分别对应的位置编码的相同编码前缀的位数,正相关于这两个位置的接近程度;
确定模块702,基于各个用户的用户标识,确定若干用户标识集合;其中,同一用户标识集合中的各个用户标识对应于相同的编码前缀;
构建模块703,基于每个用户标识集合与该用户标识集合对应的编码前缀,构建一个索引记录,得到包含若干索引记录的位置索引。
在一些实施例中,所述转换模块701,基于Geohash算法,将各个用户标识分别对应的位置的经纬度转换成相应的位置编码的i位编码前缀。
在一些实施例中,所述构建模块703,基于每个用户标识集合、该用户标识集合对应的编码前缀、该用户标识集合中每个用户标识,构建一个索引记录。
在一些实施例中,还包括:
更新模块704,若监测到任一用户所在的位置更新,则在更新后的位置对应的编码前缀不为该用户对应的用户标识集合所对应的编码前缀的情况下,将该用户的用户标识移出该用户标识集合,将该用户的用户标识添加至更新后的位置对应的编码前缀所对应的用户标识集合。
图8示例性提供一种用户确定装置,所述用户确定装置用于确定位于目标位置范围内的用户;
其中,以树结构表示位置编码结构,树结构中从根节点出发的每个路径中的第j个节点的编码为相应的M位编码前缀的前j-1位编码,j=2、…、M+1;所述装置包括执行模块801,用于执行以下步骤:
将根节点入栈,并执行以下第一流程:
判断栈是否为空;若是,则结束所述第一流程;若否,则执行以下第二流程:
确定当前栈顶节点,判断当前栈顶节点是否有未被选择过的子节点;若否,则将栈顶节点出栈,之后重新开始所述第一流程;若是,则选择栈顶节点的未被选择过的一个子节点,比较该子节点的编码所表示的位置范围与所述目标位置范围;
若该子节点所表示的位置范围包含于所述目标位置范围,则确定该子节点符合检索要求,并重新开始所述第二流程;
在结束所述第一流程之后,将所有符合检索要求的子节点对应的用户标识集合合并,得到用户标识总集合;
基于所述用户标识总集合,确定位于目标位置范围内的用户。
在一些实施例中,所述第二流程还包括如下步骤:
在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围包含所述目标位置范围,则将该子节点入栈,之后重新开始所述第二流程。
在一些实施例中,所述第二流程还包括如下步骤:
在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围与所述目标位置范围相交,则将该子节点入栈,之后重新开始所述第二流程。
在一些实施例中,所述第二流程还包括如下步骤:
在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围与所述目标位置范围无交集,则重新开始所述第二流程。
在一些实施例中,在判断当前栈顶节点是否有未被选择过的子节点之前,所述第二流程还包括:
判断在树结构中栈顶节点与根节点之间的层级差是否小于预设差值,若否,则将栈顶节点出栈,之后重新开始所述第一流程。
在一些实施例中,其中:
所述目标位置范围与所述预设差值负相关。
在一些实施例中,所述目标位置范围的确定步骤包括:
获取目标用户所在的位置的经纬度;
以目标用户所在的位置的经纬度为圆心,构建具有目标半径的圆形位置范围,作为目标位置范围;
所述执行模块801,将位于目标位置范围内的用户推荐给所述目标用户。
所述执行模块801,从位置索引中读取位于目标位置范围内的每个用户对应的经纬度;根据位于目标位置范围内的每个用户对应的经纬度与目标用户所在位置的经纬度之间的距离,按照预设顺序对位于目标位置范围内的每个用户进行排序;将排序后的若干用户推荐给所述目标用户。
图9是本公开提供的一种计算机可读存储介质的示意图,该介质140上存储有计算机程序,所述程序被处理器执行时实现本公开任一实施例的方法。
本公开还提供了一种计算设备,包括存储器、处理器;所述存储器用于存储可在处理器上运行的计算机指令,所述处理器用于在执行所述计算机指令时实现本公开任一实施例的方法。
图10是本公开提供的一种计算设备的结构示意图,该计算设备15可以包括但不限于:处理器151、存储器152、连接不同系统组件(包括存储器152和处理器151)的总线153。
其中,存储器152存储有计算机指令,该计算机指令可以被处理器151执行,使得处理器151能够执行本公开任一实施例的方法。存储器152可以包括随机存取存储单元RAM1521、高速缓存存储单元1522和/或只读存储单元ROM1523。该存储器152还可以包括:具有一组程序模块1524的程序工具1525,该程序模块1524包括但不限于:操作系统、一个或多个应用程序、其他程序模块和程序数据,这些程序模块一种或多种组合可以包含网络环境的实现。
总线153例如可以包括数据总线、地址总线和控制总线等。该计算设备15还可以通过I/O接口154与外部设备155通信,该外部设备155例如可以是键盘、蓝牙设备等。该计算设备150还可以通过网络适配器156与一个或多个网络通信,例如,该网络可以是局域网、广域网、公共网络等。如图所示,该网络适配器156还可以通过总线153与计算设备15的其他模块进行通信。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (10)
1.一种位置索引构建方法,包括:
将各个用户分别所在的位置的经纬度转换成相应的位置编码的i位编码前缀,i=1、…、M,M>0;其中,两个位置分别对应的位置编码的相同编码前缀的位数,正相关于这两个位置的接近程度;
基于各个用户的用户标识,确定若干用户标识集合;其中,同一用户标识集合中的各个用户标识对应于相同的编码前缀;
基于每个用户标识集合与该用户标识集合对应的编码前缀,构建一个索引记录,得到包含若干索引记录的位置索引。
2.如权利要求1所述方法,将各个用户分别所在的位置的经纬度转换成相应的位置编码的i位编码前缀,包括:
基于Geohash算法,将各个用户标识分别对应的位置的经纬度转换成相应的位置编码的i位编码前缀。
3.如权利要求1所述方法,基于每个用户标识集合与该用户标识集合对应的编码前缀,构建一个索引记录,包括:
基于每个用户标识集合、该用户标识集合对应的编码前缀、该用户标识集合中每个用户标识,构建一个索引记录。
4.如权利要求1所述方法,还包括:
若监测到任一用户所在的位置更新,则在更新后的位置对应的编码前缀不为该用户对应的用户标识集合所对应的编码前缀的情况下,将该用户的用户标识移出该用户标识集合,将该用户的用户标识添加至更新后的位置对应的编码前缀所对应的用户标识集合。
5.一种基于权利要求1-4任一项所述方法构建的位置索引的用户确定方法,所述用户确定方法用于确定位于目标位置范围内的用户;
其中,以树结构表示位置编码结构,树结构中从根节点出发的每个路径中的第j个节点的编码为相应的M位编码前缀的前j-1位编码,j=2、…、M+1;所述方法包括:
将根节点入栈,并执行以下第一流程:
判断栈是否为空;若是,则结束所述第一流程;若否,则执行以下第二流程:
确定当前栈顶节点,判断当前栈顶节点是否有未被选择过的子节点;若否,则将栈顶节点出栈,之后重新开始所述第一流程;若是,则选择栈顶节点的未被选择过的一个子节点,比较该子节点的编码所表示的位置范围与所述目标位置范围;
若该子节点所表示的位置范围包含于所述目标位置范围,则确定该子节点符合检索要求,并重新开始所述第二流程;
在结束所述第一流程之后,将所有符合检索要求的子节点对应的用户标识集合合并,得到用户标识总集合;
基于所述用户标识总集合,确定位于目标位置范围内的用户。
6.如权利要求5所述方法,所述第二流程还包括如下步骤:
在比较该子节点所表示的位置范围与所述目标位置范围之后,若该子节点所表示的位置范围包含所述目标位置范围,或该子节点所表示的位置范围与所述目标位置范围相交,则将该子节点入栈,之后重新开始所述第二流程。
7.一种位置索引构建装置,包括:
转换模块,将各个用户分别所在的位置的经纬度转换成相应的位置编码的i位编码前缀,i=1、…、M,M>0;其中,两个位置分别对应的位置编码的相同编码前缀的位数,正相关于这两个位置的接近程度;
确定模块,基于各个用户的用户标识,确定若干用户标识集合;其中,同一用户标识集合中的各个用户标识对应于相同的编码前缀;
构建模块,基于每个用户标识集合与该用户标识集合对应的编码前缀,构建一个索引记录,得到包含若干索引记录的位置索引。
8.一种基于权利要求1-4任一项所述方法构建的位置索引的用户确定装置,所述用户确定装置用于确定位于目标位置范围内的用户;
其中,以树结构表示位置编码结构,树结构中从根节点出发的每个路径中的第j个节点的编码为相应的M位编码前缀的前j-1位编码,j=2、…、M+1;所述装置包括执行模块,用于执行以下步骤:
将根节点入栈,并执行以下第一流程:
判断栈是否为空;若是,则结束所述第一流程;若否,则执行以下第二流程:
确定当前栈顶节点,判断当前栈顶节点是否有未被选择过的子节点;若否,则将栈顶节点出栈,之后重新开始所述第一流程;若是,则选择栈顶节点的未被选择过的一个子节点,比较该子节点的编码所表示的位置范围与所述目标位置范围;
若该子节点所表示的位置范围包含于所述目标位置范围,则确定该子节点符合检索要求,并重新开始所述第二流程;
在结束所述第一流程之后,将所有符合检索要求的子节点对应的用户标识集合合并,得到用户标识总集合;
基于所述用户标识总集合,确定位于目标位置范围内的用户。
9.一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现权利要求1-6任一项所述的方法。
10.一种计算设备,包括存储器、处理器;所述存储器用于存储可在处理器上运行的计算机指令,所述处理器用于在执行所述计算机指令时实现权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210038447.2A CN114461638A (zh) | 2022-01-13 | 2022-01-13 | 位置索引构建方法、用户确定方法、装置、介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210038447.2A CN114461638A (zh) | 2022-01-13 | 2022-01-13 | 位置索引构建方法、用户确定方法、装置、介质及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114461638A true CN114461638A (zh) | 2022-05-10 |
Family
ID=81409921
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210038447.2A Pending CN114461638A (zh) | 2022-01-13 | 2022-01-13 | 位置索引构建方法、用户确定方法、装置、介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114461638A (zh) |
-
2022
- 2022-01-13 CN CN202210038447.2A patent/CN114461638A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107092659B (zh) | 一种通用的树形结构存储解析方法 | |
CN107798054B (zh) | 一种基于Trie的范围查询方法及装置 | |
US9719790B2 (en) | Mapping uncertain geometries to graticules | |
CN107766433B (zh) | 一种基于Geo-BTree的范围查询方法及装置 | |
WO2016095749A1 (zh) | 电子地图中查询空间对象和建立空间索引的方法及装置 | |
WO2021072874A1 (zh) | 基于双数组的位置查询方法、装置、计算机设备及存储介质 | |
CN108846013B (zh) | 一种基于geohash与Patricia Trie的空间关键词查询方法及装置 | |
CN110597804B (zh) | 促进分布式键值存储库上的空间索引 | |
CN112685407A (zh) | 一种基于GeoSOT全球剖分网格编码的空间数据索引方法 | |
US10810235B1 (en) | Efficient region identification using hierarchical geocoded information | |
CN111723096B (zh) | 一种集成GeoHash和Quadtree的空间数据索引方法 | |
CN103365883A (zh) | 数据的索引查询方法、装置及系统 | |
CN111292356B (zh) | 运动轨迹与道路的匹配方法及装置 | |
CN106991149B (zh) | 一种融合编码和多版本数据的海量空间对象存储方法 | |
CN113806458A (zh) | 时空关联数据的查询方法、装置、电子设备和存储介质 | |
CN110909260B (zh) | 车辆显示方法、装置、计算机可读存储介质和计算机设备 | |
CN109885638B (zh) | 一种三维立体空间索引方法及系统 | |
Starikovskaya | Computing lempel-ziv factorization online | |
CN115563409A (zh) | 一种地址行政区划识别方法、装置、设备及介质 | |
CN109974716B (zh) | 地理位置匹配方法及装置、存储介质、服务器 | |
CN107798215B (zh) | 基于ppi网络层次结构预测功能模块及作用的方法 | |
CN108345607B (zh) | 搜索方法和装置 | |
Rajeswari et al. | Huffbit compress—Algorithm to compress DNA sequences using extended binary trees | |
CN114461638A (zh) | 位置索引构建方法、用户确定方法、装置、介质及设备 | |
CN111414445A (zh) | 一种应用地理信息的地址反解析方法 |
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 |