2014-06-25 10 views
11

Ich versuche, ein einfaches Autocomplete-System ähnlich wie die Demo hier zu machen: http://autocomplete.redis.io/ aber aus irgendeinem Grund kann ich nicht ZRANGEBYLEX die richtigen Ergebnisse zurückgeben. Hier ist, was ich auf der Redis CLI so mache:So imitieren Autovervollständigungssuche mit Redis ZRANGEBYLEX?

> zadd autocomplete 0 one 0 two 0 three 0 four 0 five 0 six 0 seven 0 eight 0 nine 0 ten 0 eleven 0 twelve 0 thirteen 0 fourteen 0 fifteen 

Mein Set sieht gut aus:

> zrangebylex autocomplete - + 
1) "eight" 
2) "eleven" 
3) "fifteen" 
4) "five" 
5) "four" 
6) "fourteen" 
7) "nine" 
8) "one" 
9) "seven" 
10) "six" 
11) "ten" 
12) "thirteen" 
13) "three" 
14) "twelve" 
15) "two" 

Und wenn ich ZRANGEBYLEX wie diesen das Ergebnis macht Sinn:

zrangebylex autocomplete [e [eight 
1) "eight" 

Aber wenn ich alle Elemente in der Menge, die Start mit einem "e" bekommen möchte, versuche ich dies (das ist sehr ähnlich, was die Autocomplete-Demo zeigt), aber es gibt nicht die r ight Ergebnisse:

> zrangebylex autocomplete [e [e(0xff) 
(empty list or set) 

Was muss man als params zum ZRANGEBYLEX Befehl verwenden, um für sie alle Strings mit „e“ und alles, was danach beginnen zu passen?

Antwort

15

Dies wird der Trick:

127.0.0.1:6379> zrangebylex autocomplete [e "[e\xff" 
1) "eight" 
2) "eleven" 

bearbeiten: Wie unten von Itamar Haber in seinem Kommentar darauf hingewiesen, wenn ein Client-Code verwenden, können Sie tun nicht Anführungszeichen müssen.

+0

Es ist sicher. Was genau machen die Zitate? –

+3

Anscheinend erzwinge redis-cli, den Wert als eine literale Zeichenfolge zu behandeln. Bei Verwendung eines regulären Clients aus Code werden die Anführungszeichen jedoch nicht benötigt. –

+0

@ItamarHaber was bedeutet '\ xff'? Ich verstehe nicht – BlackMamba