gpt4 book ai didi

Redis 字典顺序不起作用

转载 作者:可可西里 更新时间:2023-11-01 11:13:21 26 4
gpt4 key购买 nike

我正在尝试创建一个基本的自动完成功能(我在下面手动创建了这些功能以先对其进行测试),但不知何故在添加一些键后我没有得到我想要的结果。

我添加了一个词的每个可能版本,并用 * 标记它们的确切词(例如,如果返回 10 个键,其中 3 个带有星号,它们将显示为建议),因此我可以查询之后我的哈希数据库并获得哈希结果。

有一些重复输入尝试,但由于它为它们返回整数 0,我推测它们不是第二次添加。

我用的是Redis 3.0.6

127.0.0.1:6379> zadd zset 0 b
(integer) 1
127.0.0.1:6379> zadd zset 0 ba
(integer) 1
127.0.0.1:6379> zadd zset 0 bar
(integer) 1
127.0.0.1:6379> zadd zset 0 bar*
(integer) 1
127.0.0.1:6379> zadd zset 0 f
(integer) 1
127.0.0.1:6379> zadd zset 0 fo
(integer) 1
127.0.0.1:6379> zadd zset 0 foo
(integer) 1
127.0.0.1:6379> zadd zset 0 foo*
(integer) 1
127.0.0.1:6379> zadd zset 0 foob
(integer) 1
127.0.0.1:6379> zadd zset 0 fooba
(integer) 1
127.0.0.1:6379> zadd zset 0 foobar
(integer) 1
127.0.0.1:6379> zadd zset 0 foobar*
(integer) 1

目前没问题。我想要所有以 fo

开头的单词
127.0.0.1:6379> zrank zset fo
(integer) 5

它给出了 5,所以我递增 1(如 here 所示,如果我做对了)并查询所有键。

127.0.0.1:6379> zrange zset 6 -1
1) "foo"
2) "foo*"
3) "foob"
4) "fooba"
5) "foobar"
6) "foobar*"

没问题,我得到了想要的结果。

我一直在添加 key 。

127.0.0.1:6379> zadd zset 0 a
(integer) 1
127.0.0.1:6379> zadd zset 0 b
(integer) 0
127.0.0.1:6379> zadd zset 0 c
(integer) 1
127.0.0.1:6379> zadd zset 0 fi
(integer) 1
127.0.0.1:6379> zadd zset 0 fil
(integer) 1
127.0.0.1:6379> zadd zset 0 filli
(integer) 1
127.0.0.1:6379> zadd zset 0 fillib
(integer) 1
127.0.0.1:6379> zadd zset 0 fillibo
(integer) 1
127.0.0.1:6379> zadd zset 0 filliboy
(integer) 1
127.0.0.1:6379> zadd zset 0 filliboya
(integer) 1
127.0.0.1:6379> zrank zset fo
(integer) 14

我再做一次搜索。

127.0.0.1:6379> zrange zset 15 -1
1) "foo"
2) "foo*"
3) "foob"
4) "fooba"
5) "foobar"
6) "foobar*"

好的。我不断补充。

127.0.0.1:6379> zadd zset 0 d
(integer) 1
127.0.0.1:6379> zadd zset 0 e
(integer) 1
127.0.0.1:6379> zadd zset 0 x
(integer) 1
127.0.0.1:6379> zadd zset 0 y
(integer) 1
127.0.0.1:6379> zadd zset 0 z
(integer) 1
127.0.0.1:6379> zadd zset 0 filli*
(integer) 1
127.0.0.1:6379> zadd zset 0 filliboya*
(integer) 1

这是事情变得有趣的部分。我想获取所有以 filli 开头的单词,但我做不到。为什么?

127.0.0.1:6379> zrank zset filli
(integer) 11
127.0.0.1:6379> zrange zset 12 -1
1) "filli*"
2) "fillib"
3) "fillibo"
4) "filliboy"
5) "filliboya"
6) "filliboya*"
7) "fo"
8) "foo"
9) "foo*"
10) "foob"
11) "fooba"
12) "foobar"
13) "foobar*"
14) "x"
15) "y"
16) "z"
127.0.0.1:6379>

最佳答案

字典顺序有效,但您要求的是从检索到的成员到末尾 (-1) 的整个范围。从 Redis v2.8 开始你应该使用 ZRANGEBYLEX为此目的的命令。在您的情况下,它应该如下所示:

ZRANGEBYLEX zset [filli [filli\xff

关于Redis 字典顺序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35219685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com