You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RediSearch的GEOFILTER时如何先按数值字段再按距离排序结果

RediSearch GEOFILTER多级排序实现方案

1. 索引预处理

首先在建索引时,将优先排序的数值字段(如示例中的价格price)定义为NUMERIC类型,地理位置字段定义为GEO类型。推荐给排序字段添加SORTABLE标识,可大幅提升大数据量下的排序性能:

FT.CREATE shops SCHEMA price NUMERIC SORTABLE location GEO

2. 多级排序查询

RediSearch提供内置虚拟字段GEODISTANCE,仅在使用GEOFILTER查询时自动生成,存储了查询坐标与结果坐标的实际距离,单位与GEOFILTER指定的单位完全一致。
你可以直接在SORTBY参数中依次指定多级排序规则即可满足需求,示例如下(查询坐标116.40、39.90周边5公里内的商铺,优先按价格升序,同价按距离升序,返回前10条结果):

FT.SEARCH shops "*" GEOFILTER location 116.40 39.90 5 km SORTBY 4 price ASC GEODISTANCE ASC LIMIT 0 10

参数说明:

  • SORTBY 4:表示后续跟随4个排序参数,对应2组排序规则(每组规则为「字段名+排序方向」2个参数)
  • price ASC:第一级排序规则,按价格从低到高
  • GEODISTANCE ASC:第二级排序规则,按距离从近到远

3. 扩展:返回距离字段

如果需要在返回结果中直观查看距离数值,可通过RETURN参数将GEODISTANCE别名后返回:

FT.SEARCH shops "*" GEOFILTER location 116.40 39.90 5 km SORTBY 4 price ASC GEODISTANCE ASC RETURN 2 GEODISTANCE distance LIMIT 0 10

注意事项

  • 未标记SORTABLE的字段也可参与排序,仅大数据量场景下查询性能会有所降低
  • GEOFILTER支持m(米)、km(公里)、mi(英里)、ft(英尺)四种单位,GEODISTANCE的单位会和查询时指定的单位保持一致

内容的提问来源于stack exchange,提问作者zigzag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:06:05