发明内容
有鉴于此,本发明的主要目的在于提供一种基于空间索引的搜索结果缓存方法和系统,以解决现有LBS应用中缓存结果命中率低的问题。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种基于空间索引的搜索结果缓存方法,将平面区域划分为多个网格,该方法还包括:
将根据搜索请求进行搜索得到的搜索结果进行缓存,得到缓存结果;
根据所述搜索请求中用户坐标生成对应的网格中心点坐标;
根据所述网格中心点坐标和所述搜索请求中的关键字生成搜索关键字,并将所述搜索关键字作为缓存关键字与所述缓存结果关联。
其中,所述网格为正方形。
根据所述搜索请求中的用户坐标生成对应的网格中心点坐标,包括:
其中,所述X为用户坐标的横坐标,单位为m;所述Y为用户坐标的纵坐标,单位为m;所述网格边长单位为m;所述Xo为网格中心点坐标的横坐标,单位为m;所述Yo为网格中心点坐标的纵坐标,单位为m。
根据所述网格中心点坐标和所述搜索请求中的关键字生成搜索关键字,包括:
根据所述网格中心点坐标生成网格标识(SpaceID)为:
所述网格系数=100000/(网格边长/1000);
其中,所述Xo为网格中心点坐标的横坐标,单位为m;所述Yo为网格中心点坐标的纵坐标,单位为m;所述网格边长单位为m;所述搜索关键字由所述SpaceID和所述关键字组成。
将所述搜索关键字与所述缓存结果关联之后,该方法还包括:
根据搜索请求中的用户坐标和关键字生成搜索关键字;
将所述搜索关键字和所述缓存关键字进行匹配,匹配成功时,命中缓存结果成功;匹配失败时,命中缓存结果失败,返回缓存搜索结果。
所述根据搜索请求中的用户坐标和关键字生成搜索关键字,包括:
根据所述用户坐标生成SpaceID:
所述网格系数=100000/(网格边长/1000)。
本发明还提供了一种基于空间索引的搜索结果缓存系统,该系统包括:
网格划分单元,用于将平面区域划分为多个网格;
搜索单元,用于将根据搜索请求进行搜索得到的搜索结果;
缓存单元,用于将所述搜索结果进行缓存,得到缓存结果;还用于根据所述搜索请求中的用户坐标生成对应的网格中心点坐标;并根据所述网格中心点坐标和所述搜索请求中的关键字生成搜索关键字,将所述搜索关键字作为缓存关键字与所述缓存结果关联。
所述网格为正方形。
所述缓存单元,还用于根据所述搜索请求中的用户坐标生成对应的网格中心点坐标时,得到网格中心点坐标为:
其中,所述X为用户坐标的横坐标,单位为m;所述Y为用户坐标的纵坐标,单位为m;所述网格边长单位为m;所述Xo为网格中心点坐标的横坐标,单位为m;所述Yo为网格中心点坐标的纵坐标,单位为m。
所述缓存单元,还用于根据所述网格中心点坐标生成SpaceID:
所述网格系数=100000/(网格边长/1000);
所述缓存单元,还用于将所述SpaceID和所述关键字组成搜索关键字。
本发明基于空间索引的搜索结果缓存方法和系统,根据搜索请求中的用户坐标生成对应的网格中心点坐标;并根据生成的网格中心点坐标和搜索请求中的关键字生成搜索关键字,将搜索关键字作为缓存关键字与缓存结果关联,如此,就能实现将某一距离范围内(例如一个网格)的搜索需求都定位到同一个坐标点(网格中心点坐标),那么,用户当前的坐标点只要是与网格中心点坐标在一个网格内,用户搜索相同的地标时,就可以命中缓存结果,从而提高缓存结果命中率。
具体实施方式
本发明基于空间索引的搜索结果缓存方法的关键在于:将某一距离范围内的查询需求都定位到同一个坐标点,从而提高缓存命中率。
本发明利用地标索引中网格索引的思想来处理坐标,即:将平面区域划分为网格,并对网格进行编号,用网格中心点坐标的查询结果代替网格内所有坐标的查询结果。
如图1所示,本发明基于空间索引的搜索结果缓存方法,包括:
步骤101,将根据搜索请求进行搜索得到的搜索结果进行缓存,得到缓存结果。一般,首次搜索时,根据搜索请求到逻辑层进行搜索得到搜索结果,此处可以采用现有搜索技术,不再赘述。将搜索结果进行缓存,即为缓存结果。
步骤102,根据搜索请求中用户坐标生成对应的网格中心点坐标。
该步骤即是将某一距离范围内的搜索需求都定位到同一个坐标点,即网格中心点坐标。
其中,本发明对平面区域划分得到的网格为正方形,网格边长可以根据实际需要设定,如果要求搜索的精度比较高,则可以选择较小的网格边长。
具体的,生成网格中心点坐标,包括:
其中,X为搜索请求中用户坐标的横坐标,单位为m;Y为搜索请求中用户坐标的纵坐标,单位为m;网格边长单位为m;Xo为网格中心点坐标的横坐标,单位为m;Yo为网格中心点坐标的纵坐标,单位为m。
步骤103,根据网格中心点坐标和搜索请求中的关键字生成搜索关键字。
具体的,该步骤的实现包括:
首先,根据网格中心点坐标生成网格标识(SpaceID):
其中,网格系数=100000/(网格边长/1000);
在本发明的LBS应用系统的数据库中,所有横坐标和纵坐标的值均小于99999km,因此,网格系数中的100000为坐标值的上限,单位为km。
上述Xo即为网格中心点坐标的横坐标,单位为m;Yo即为网格中心点坐标的纵坐标,单位为m;网格边长单位为m。
搜索关键字由SpaceID和搜索请求中的关键字组成,根据需要可以任意设置搜索关键字的表示方式,例如可以采用如下的表示方式:SpaceID_关键字。
步骤104,将搜索关键字作为缓存关键字与缓存结果关联。
将搜索关键字作为缓存关键字与缓存结果关联起来,以备后续搜索使用。
基于图1缓存方法的后续搜索流程如图2所示,包括:
步骤105,根据搜索请求中的用户坐标和关键字生成搜索关键字。
首先,生成网格ID:网格系数=100000/(网格边长/1000);
其中,X为用户坐标的横坐标,单位为m;Y为用户坐标的纵坐标,单位为m;网格边长单位为m;
由SpaceID和关键字组成搜索关键字,该步骤的搜索关键字与步骤104的缓存关键字采用相同的表示方式。
步骤106~107,将搜索关键字和缓存关键字进行匹配,匹配成功时,命中缓存结果,将缓存结果显示给用户;匹配失败时,命中缓存结果失败,返回步骤101,作为首次搜索处理。
下面通过具体实施例来说明本发明技术方案的具体实现,本实施例包括以下流程:
1、将平面区域划分为网格,网格边长为1000m。
2、用户首次对地标A进行搜索,发出搜索请求1,根据搜索请求1到逻辑层进行搜索得到搜索结果、即地标A的位置信息,进行缓存,得到缓存结果1。
3、根据搜索请求1中的用户坐标(200m,400m)生成对应的网格中心点坐标为:
则用户坐标(200m,400m)对应的网格中心点坐标为:(500m,500m)。
4、根据网格中心点坐标生成SpaceID,具体的:
网格系数=100000/(1000/1000)=100000;
然后,由SpaceID(0)和关键字(A)生成搜索关键字1为:0_A。
5、将搜索关键字1(0_A)与缓存结果1进行关联。
6、假设用户又一次发出了搜索请求2,搜索请求2中的用户坐标为(600m,800m),关键字为A,则
搜索关键字2为:0A。
7、可见,搜索关键字2与缓存关键字1完全匹配,则命中缓存结果1,可以直接将缓存结果1反馈给用户,无需到逻辑层进行搜索,提高了搜索效率。
另外,通过上述的缓存过程和搜索过程可知,用户当前的坐标点只要是与网格中心点坐标(500m,500m)在同一个网格内,用户搜索地标A时,就可以命中缓存结果,从而提高命中率。
8、假设用户又一次发出了搜索请求3,搜索请求3中的用户坐标为(1500m,800m),关键字为B,则
搜索关键字3为:100000_B。
9、可见,搜索关键字3与缓存关键字1不匹配,则命中失败,将搜索请求3以首次搜索对待,根据搜索请求3到逻辑层进行搜索得到搜索结果,即:地标B的位置信息进行缓存,得到缓存结果3。
10、经过计算,用户坐标(1500m,800m)对应的网格中心点坐标为(1500m,500m);
搜索关键字3为:100000_B。
11、将搜索关键字3(100000_B)与缓存结果3进行关联。
为了实现上述搜索结果缓存方法,本发明还提供了一种基于空间索引的搜索结果缓存系统,如图3所示,该系统包括:
网格划分单元,用于将平面区域划分为多个网格;
搜索单元,用于将根据搜索请求进行搜索得到的搜索结果;
缓存单元,用于将搜索结果进行缓存,得到缓存结果;还用于根据搜索请求中的用户坐标生成对应的网格中心点坐标;并根据网格中心点坐标和搜索请求中的关键字生成搜索关键字,将搜索关键字作为缓存关键字与缓存结果关联;
其中,网格为正方形。
缓存单元,还用于根据搜索请求中的用户坐标生成对应的网格中心点坐标时,得到网格中心点坐标为:
其中,X为用户坐标的横坐标,单位为m;Y为用户坐标的纵坐标,单位为m;网格边长单位为m;Xo为网格中心点坐标的横坐标,单位为m;Yo为网格中心点坐标的纵坐标,单位为m。
缓存单元,还用于根据网格中心点坐标生成SpaceID:
网格系数=100000/(网格边长/1000);
其中,Xo为网格中心点坐标的横坐标,单位为m;Yo为网格中心点坐标的纵坐标,单位为m;网格边长单位为m。
缓存单元,还用于将SpaceID和关键字组成搜索关键字。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。