Redis:FT. xmlfuzzy matching sorting by distance to a provided coordinate

2ledvvac  于 2023-10-15  发布在  Redis
关注(0)|答案(1)|浏览(116)

我在我的redis DB中有餐馆集合,餐馆对象存储在下面:

{
  uid: "T8957Ixo1kRjtw3Nof3Ttase",
  name: "Restaurant name",
  address:
  "751 S 10th St, Philadelphia, Pennsylvania 19140, United States",
  location: "-78.15096902,38.94039013",
}

我想知道是否有可能返回按距离排序的结果
我试着做FT.SEARCH index "@name:%%burger%% @location:[-75.153270 39.949655]" SORTBY location ASC
但它根本不起作用,我如何通过重新搜索来实现这一点?

ryhaxcpt

ryhaxcpt1#

目前,只有FT.AGGREGATE才能实现。你将不得不使用APPLY(文档在这里),然后按它排序。
尝试以下操作:

FT.AGGREGATE index "@name:%%burger%%" APPLY "geodistance(@location, -75.153270, 39.949655)" AS distance SORTBY distance ASC

在文档中还有一些其他的geodistance重载,你可以使用最适合你的环境的重载。
此外,您应该再看一下GEO过滤器语法。您的查询无效:
Geo滤波器
从v0.21开始,可以使用语法@field将geo radius查询直接添加到查询语言中:[{lon} {lat} {radius} {m|公里|mi| ft}]。此操作将结果过滤为从经度、纬度点开始的给定半径,以米、公里、英里或英尺为单位定义。请参阅Redis自己的GEORADIUS命令了解更多细节,因为它是内部使用的)。
半径过滤器可以像数字过滤器一样添加到查询中。例如,在一个企业数据库中,查找旧金山弗朗西斯科附近(半径5公里内)的中国餐馆将表示为:Chinese restaurant @location:[-122.41 37.77 5 km].
我建议的查询将工作,但如果您可以给予一个相关的半径来查找,您可能会获得更好的性能。
例如:

FT.AGGREGATE index "@name:%%burger%% @location:[-75.153270 39.949655 5 km]" APPLY "geodistance(@location, -75.153270, 39.949655)" AS distance SORTBY distance ASC

将搜索范围限制在5公里半径内
希望能帮上忙!

相关问题