2012-02-19 3 views
5

が、私はそうのような世界の都市のセットを持っているとしましょう:Redisはプレフィックスマッチングを行うことができますか?

EUKLOND 
EUKMANC 
EUKEDIN 
EITROME 
EITMILA 
EITNAPE 
EFRPARI 
EFRAVIG 
EFRBRES 

最初の文字は大陸である場合は、次の二つの国であり、末尾の4は省略都市名です。

すべてのエントリまたはEITを返し、イタリアまたはEFRPARIのすべてのエントリを取得し、パリのエントリだけを取得する "E"を渡すことで、このセットを検索できます。

これは私がレディスとできることですか?

答えて

11

一般的に、自動完成シナリオです。

Salvatore Sanfilippo (@Antirez)、Redisの著者は、これを達成する方法についてthorough blog postと書いています。

UPDATE:私は最初サルヴァトーレのソリューションを取り、明確な方法でそれを説明し、第二は、複数ワードフレーズのためにも良いですが、別のソリューションを提供することを、別の偉大なblog postを見ました。

+0

ありがとう、私はこの記事を読んだが、著者がどのように到着したかは分かりません。 "zrange zset 6 -1"彼は6-1スライスをする必要があることをどのように知っていますか?ヨーロッパの国で都市の数が異なる場合は、「zrange zset X -1」でXを計算するにはどうすればよいですか? – jdoig

+0

まず、 'zrank zset fo'を実行して' fo'がどこにあるのかを問い合わせました。彼は答え「5」を得た。その後、彼は6(5 + 1)から最後まですべてのアイテムを取得するように求めました。彼は 'zrange zset 6-1'を実行します。負の数を使用する場合は、「最後から」を意味します。 -1はソートされたセットの最後の要素を意味します([redis documentation](http://redis.io/commands/zrange)参照)。 –

+0

これは私が仮定したものです。 "fo"から "end of list"までは、これを実行するための実行可能な方法ではありません。上記のデータは一例にすぎません。潜在的に大量のデータ(セットは約40億アイテムのIRCを保持することができる)であるため、セットの最後まで任意のポイントから戻ってくることはできません。 – jdoig

関連する問題