如何使用Redis ZRANGEBYLEX模仿自动完成搜索?

时间:2014-06-25 21:21:51

标签: autocomplete redis

我尝试制作一个简单的自动完成系统,就像这里的演示一样:http://autocomplete.redis.io/但由于某种原因,我无法让ZRANGEBYLEX返回正确的结果。这就是我在Redis CLI上所做的事情:

> 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

我的设置很好看:

> 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"

如果我像这样使用ZRANGEBYLEX,结果就有意义了:

zrangebylex autocomplete [e [eight
1) "eight"

但是如果我想通过" e"来获取开始的集合中的所有项目。我试试这个(这与自动完成演示显示的非常相似),但它没有返回正确的结果:

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

必须使用什么作为ZRANGEBYLEX命令的参数才能匹配任何以&#34开头的字符串; e"以及之后的其他事情?

1 个答案:

答案 0 :(得分:18)

这样可以解决问题:

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

编辑:正如Itamar Haber在下面的评论中所述,使用代码客户端时,需要引号。