2012-02-19 74 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