GEOSEARCH

查询框或圆区域内成员的地理空间索引。

语法

GEOSEARCH key | BYBOX width height > [ASC | DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST] [WITHHASH]

引入版本:6.2.0

复杂度摘要:O(N+log(M)

使用 GEOADD 返回填充有地理空间信息的有序集合的成员,这些成员位于给定形状指定的区域的边界内。该命令扩展了GEORADIUS命令,因此除了支持圆形区域内搜索外,还支持矩形区域内搜索。

应使用该命令代替已弃用的 GEORADIUS 和 GEORADIUSBYMEMBER 命令。

必需参数

key

保存地理空间索引(有序集合)的键的名称。

查询中心点选项:

FROMMEMBER member

以现有member的位置为搜索中心。与 FROMLONLAT 互斥。

FROMLONLAT longitude latitude

使用给定的坐标作为搜索的中心。与 FROMMEMBER 互斥。

查询形状选项:

BYRADIUS radius M | KM | FT | MI

以指定单位在给定radius 的圆内搜索。与 BYBOX 互斥。

BYBOX width height M | KM | FT | MI

在指定单位的给定 width 和 height 的轴对齐框中搜索。与 BYRADIUS 互斥。

可选参数

ASC | DESC

按距中心的距离对结果进行排序:最近的优先 (ASC) 或最远的优先 (DESC)。

COUNT count [ANY]

最多返回count个匹配项。使用 ANY,一旦找到足够的匹配项,该命令就会返回 — 速度更快,但结果可能未排序。如果没有 COUNT,则返回所有匹配的项目。这意味着返回的结果可能不是最接近指定点的结果,但服务器生成它们所投入的精力要少得多。当未提供 ANY 时,该命令将执行与指定区域匹配的项目数量成正比的工作并对它们进行排序,因此使用非常小的 COUNT 选项查询非常大的区域可能会很慢,即使只返回一些结果。

WITHCOORD

同时返回每个匹配项的经度和纬度。

WITHDIST

同时返回每个匹配项距中心的距离,单位与半径相同。

WITHHASH

还返回每个匹配项的原始 52 位 geohash 编码分数。

示例

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEOADD Sicily 12.758489 38.788135 "edge1"   17.241510 38.788135 "edge2"
(integer) 2
redis> GEOSEARCH Sicily FROMLONLAT 15 37 BYRADIUS 200 km ASC
1) "Catania"
2) "Palermo"
redis> GEOSEARCH Sicily FROMLONLAT 15 37 BYBOX 400 400 km ASC WITHCOORD WITHDIST
1) 1) "Catania"
   2) "56.4413"
   3) 1) "15.087267458438873"
      2) "37.50266842333162"
2) 1) "Palermo"
   2) "190.4424"
   3) 1) "13.361389338970184"
      2) "38.1155563954963"
3) 1) "edge2"
   2) "279.7403"
   3) 1) "17.241510450839996"
      2) "38.78813451624225"
4) 1) "edge1"
   2) "279.7405"
   3) 1) "12.75848776102066"
      2) "38.78813451624225"

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 标准
✅ 主动-主动
✅ 标准
✅ 主动-主动

返回值

RESP2

以下之一: * 如果未指定 WITH* 选项,则为匹配成员名称的 数组回复 * 如果指定了 WITHCOORD、WITHDIST 或 WITHHASH 选项,则该命令返回数组的 数组回复,其中每个子数组代表单个项目: * 距中心的距离为浮点数,采用与半径中指定的相同单位。 * Geohash 整数。 * 坐标为两个 x,y 数组(经度、纬度)。

RESP3

以下之一: * 如果未指定 WITH* 选项,则为匹配成员名称的 数组回复 * 如果指定了 WITHCOORD、WITHDIST 或 WITHHASH 选项,则该命令返回数组的 数组回复,其中每个子数组代表单个项目: * 距中心的距离为浮点数,采用与半径中指定的相同单位。 * Geohash 整数。 * 坐标为两个 x,y 数组(经度、纬度)。

资料来源:Redis 官方 GEOSEARCH 文档;中文内容参考 Redis 文档许可。