2012-02-19 71 views
5

可以说我有一组城市在世界上像这样:可以Redis做前缀匹配吗?

EUKLOND 
EUKMANC 
EUKEDIN 
EITROME 
EITMILA 
EITNAPE 
EFRPARI 
EFRAVIG 
EFRBRES 

当第一个字母是大陆,未来两年是国家和尾4是一个简短的城市名称。

我希望能够通过传递“E”来搜索这个集合,该集合将返回所有条目或EIT并检索意大利或EFRPARI的所有条目并获取巴黎条目。

这是我可以用Redis做的事吗?

回答

11

通常,这是一个自动完成的场景。

Salvatore Sanfilippo (@Antirez),Redis的作者,写了一个thorough blog post关于如何做到这一点。

更新:我刚才看到另一个伟大的blog post,首先需要萨尔瓦多的解决方案,并解释它以明确的方式,二是提供了另一种解决方案是多字词组也不错。

+0

谢谢Ofer,我读过这篇文章,但我似乎无法弄清作者到达的方式:“zrange zset 6 -1”。他怎么知道他需要做6-1切片?如果我在欧洲国家拥有不同数量的城市,我该如何计算“zrange zset X -1”中的X? – jdoig 2012-02-19 21:33:23

+0

首先,他通过运行'zrank zset fo'来查询'fo'的位置。他得到了答案'5'。然后,他询问从6(5 + 1)中获得所有项目,直到最后。他运行'zrange zset 6 -1'。当你使用负数时,它意味着'从最后'。 -1表示'有序集合的最后一个元素'(参见[redis文档](http://redis.io/commands/zrange))。 – 2012-02-20 06:37:29

+0

是的,这是我所设想的。从“fo”到“list of end”对我来说不是一个可行的方法。上面的数据只是一个例子。由于这可能是大量的数据(集合可以容纳大约40亿项IRC),我无法真正承担从某个任意点返回到该集合的末尾。 – jdoig 2012-02-20 06:51:04