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

Autocomplete 如何使用Redis ZRANGEBYLEX模拟自动完成搜索?,autocomplete,redis,Autocomplete,Redis,我试图制作一个简单的自动完成系统,就像这里的演示:但由于某些原因,我无法让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 aut

我试图制作一个简单的自动完成系统,就像这里的演示:但由于某些原因,我无法让
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”开头的项目,我会尝试这样做(这与autocomplete演示显示的非常类似),但它不会返回正确的结果:

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

必须使用什么作为
ZRANGEBYLEX
命令的参数,才能匹配以“e”开头的任何字符串以及其后的任何其他字符串?

这将实现以下技巧:

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

编辑:正如Itamar Haber在下面的评论中所指出的,当使用代码客户端时,您确实不需要引号。

确实需要引号。引号到底是做什么的?显然是强制redis cli将该值视为文本字符串。当使用来自代码的常规客户端时,不需要引号。@ItamarHaber
\xff
的含义是什么?我不明白“\”是转义字符,“x”表示十六进制字符表示法,“ff”是以16为底的255。因此,“\xff”是最大的(按词典编纂)字符。这可能不太明显-如果您只是使用[ez而不是[e\xff,您将无法在结果中包含带撇号的字符串,如e'vret。