我使用Redis和php及其库phpredis。在redis中的Geohash和php
我有以下结构:
city:1 {
lat->14.02,
lon->10.00,
hash->sp2f1h60w5j
}
city:2 {
lat->14.03,
lon->10.1,
hash->sp2f1h60w5m
}
但我还没有找到一种方法通过哈希来搜索。我想搜索例如完全相同的散列或大致相同的散列。 我应该改变我的结构吗?
谢谢。
我使用Redis和php及其库phpredis。在redis中的Geohash和php
我有以下结构:
city:1 {
lat->14.02,
lon->10.00,
hash->sp2f1h60w5j
}
city:2 {
lat->14.03,
lon->10.1,
hash->sp2f1h60w5m
}
但我还没有找到一种方法通过哈希来搜索。我想搜索例如完全相同的散列或大致相同的散列。 我应该改变我的结构吗?
谢谢。
您可以按照Josiah Carlson的建议from this thread,并将散列转换为数字,并将其用作排序集合中的分数。事情是这样的:
city:1 {
lat->14.02,
lon->10.00,
hash->sp2f1h60w5j
}
city:2 {
lat->14.03,
lon->10.1,
hash->sp2f1h60w5m
}
要使用geohashes数字,你需要将它们从底部32使用特定的字符映射解码 - 见Geohash on Wikipedia。我将使用下面的示例数字。现在
cities { (1, 4711), (2, 4712) }
可以使用zrangebyscore找到城市所在地区:
zrangebyscore cities 4000 5000
为什么你不使用钥匙redis的得到的元素。
,如:
城市sp2f1h60w5j = 1
城市sp2f1h60w5m = 2
那么,如果你想在壁橱: 度日 “钥匙”: 城市sp2f1h60w * 如果意志返回键“......”或城市ID的“数组”。不记得确切的回报数据。
欢呼声
你想查找特定点附近的所有项目吗?既然你在寻找确切的或接近的匹配,我认为是这样。 Redis昨天发布了全新的Geo功能(http://redis.io/commands#geo)。
GeoRadius和GeoRadiusByMember是你正在寻找的。
你也可以看看它是如何在https://github.com/doat/geodis包中完成的。 – 2012-08-16 07:46:02