暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GEO地理位置搜索->redis和solr的搜索实践

V客 2021-04-07
1088

一、redis的GEO地理位置搜索:

       GEO的地理位置搜索技术是redis3.2的新增功能,发布时间大概是2016年的时候,redis的geo特性一共提供了6个命令:

1、geoadd:增加某个地理位置的坐标。geoadd命令增加地理位置的时候,会先计算地理位置坐标的geohash值,然后地理位置作为有序集合的member,geohash作为该member的score。然后使用zadd命令插入到有序集合。

2、geopos:获取某个地理位置的坐标。geopos命令则先根据地理位置获取geohash值,然后decode得到地理位置的坐标。

3、geodist:获取两个地理位置的距离。geopos命令则先根据地理位置获取geohash值,然后decode得到地理位置的坐标。

4、georadius:根据给定地理位置坐标获取指定范围内的地理位置集合。

5、georadiusbymember:根据给定地理位置获取指定范围内的地理位置集合。georadius和georadiusbymember使用相同的实现,georadiusbymember多了一步把地理位置转换成对应的坐标。然后查找该坐标和周围对应8个坐标符合距离要求的地理位置。因为geohash得到的值其实是个格子,并不是点,这样通过计算周围对应8个坐标就能解决边缘问题。由于使用有序集合保存地理位置,在对地列位置基于范围查询,就相当于实现了zrange命令,内部的实现确实与zrange命令一致,只是geo有些特别的处理,比如获得的某个地理位置,还需要计算该地理位置是否符合给定的距离访问。

6、geohash:获取某个地理位置的geohash值。geohash则直接返回了地理位置的geohash值。

具体应用的例子如下:

二、solr的GEO地理位置搜索

支持2种方式搜索

1. geofilt搜索:该类型将生成一个以pt为中点,以d为半径,形成一个圆形,该圆形中的数据符合过滤器的条件,不会被过滤掉。

2. bbox搜索:该过滤器,会先画一个域geofilt相同的圆,然后形成一个与圆外切的正方形,该正方形中的数据通过过滤器,起范围表示为下图中的蓝色方框。


查询语法如图:

具体应用例子如下:



文章转载自V客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论