我在我的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
但它根本不起作用,我如何通过重新搜索来实现这一点?
1条答案
按热度按时间ryhaxcpt1#
目前,只有
FT.AGGREGATE
才能实现。你将不得不使用APPLY
(文档在这里),然后按它排序。尝试以下操作:
在文档中还有一些其他的
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].
我建议的查询将工作,但如果您可以给予一个相关的半径来查找,您可能会获得更好的性能。
例如:
将搜索范围限制在5公里半径内
希望能帮上忙!