地理搜索
语法
GEOSEARCH key <FROMMEMBER member | FROMLONLAT longitude latitude> <BYRADIUS radius <M | KM | FT | MI> | BYBOX width height <M | KM | FT | MI>> [ASC | DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST] [WITHHASH]
- 从以下位置开始可用:
- 6.2.0
- 时间复杂度:
- O(N+log(M)),其中 N 是作为筛选器提供的形状周围网格对齐边界框区域中的元素数,M 是形状内的项数
- ACL 类别:
-
@read
,@geo
,@slow
,
使用 返回填充有地理空间信息的有序集的成员GEOADD
,它们位于给定形状指定的区域的边界内。此命令扩展了GEORADIUS
命令,因此除了在圆形区域内搜索外,它还支持在矩形区域内搜索。
此命令应代替已弃用的GEORADIUS
和GEORADIUSBYMEMBER
命令。
查询的中心点由以下强制选项之一提供:
FROMMEMBER
:使用给定的现有位置<member>
在 sorted 集中。FROMLONLAT
:使用给定的<longitude>
和<latitude>
位置。
查询的形状由以下强制选项之一提供:
BYRADIUS
:似GEORADIUS
,根据给定的圆形区域内搜索<radius>
.BYBOX
:在轴对齐的矩形内搜索,由<height>
和<width>
.
该命令可选择使用以下选项返回其他信息:
WITHDIST
:同时返回返回的项目与指定中心点的距离。返回距离的单位与为 radius 或 height 和 width 参数指定的单位相同。WITHCOORD
:同时返回匹配项目的经度和纬度。WITHHASH
:还返回项目的原始 geohash 编码的排序集分数,格式为 52 位无符号整数。这仅对低级 hack 或调试有用,否则对普通用户来说兴趣不大。
默认情况下,匹配项将返回 unsort。要对它们进行排序,请使用以下两个选项之一:
ASC
:相对于中心点,从最近到最远的顺序对返回的项目进行排序。DESC
:相对于中心点,从最远到最近对返回的项目进行排序。
默认情况下,将返回所有匹配的项。要将结果限制为前 N 个匹配项,请使用计数<count>
选择。
当ANY
option,则命令会在找到足够多的匹配项后立即返回。这意味着返回的结果可能不是最接近指定点的结果,但服务器为生成这些结果而投入的工作量要少得多。
什么时候ANY
未提供,则该命令将执行与与指定区域匹配的项目数量成比例的工作并对其进行排序。
因此,要查询非常大的区域,并且COUNT
选项可能会很慢,即使只返回几个结果。
例子
RESP2/RESP3 回复
以下选项之一:
- 如果没有
WITH*
选项,则匹配成员名称的 Array 回复 - 如果
WITHCOORD
,WITHDIST
或WITHHASH
options 时,该命令返回数组的 Array 回复,其中每个子数组代表一个项目:- 与中心的距离,以浮点数表示,单位与半径中指定的单位相同。
- Geohash 整数。
- 坐标为两个项 x,y 数组 (longitude,latitude)。
历史
- 从 Redis 版本 7.0.0 开始:添加了对大写单位名称的支持。