*Redis FT.SUGDEL 命令

FT.SUGDEL 用于从自动补全建议词典中删除一个词条。


*语法

FT.SUGDEL key string

*参数说明

参数 类型 必填 说明
key String 自动补全词典的键名
string String 要删除的词条文本

*返回值

  • Integer: 1 表示删除成功;0 表示词条不存在或词典不存在

*时间复杂度

O(n),其中 n 是词条长度。与词典大小无关。


*示例

*删除词条

> FT.SUGADD ac:products "redis" 1.0
(integer) 1
> FT.SUGDEL ac:products "redis"
(integer) 1
> FT.SUGDEL ac:products "redis"
(integer) 0

*删除不存在的词条

> FT.SUGDEL ac:products "nonexistent"
(integer) 0

*删除后确认词典长度

> FT.SUGADD ac:products "redis" 1.0
(integer) 1
> FT.SUGADD ac:products "redisearch" 0.8
(integer) 2
> FT.SUGLEN ac:products
(integer) 2
> FT.SUGDEL ac:products "redis"
(integer) 1
> FT.SUGLEN ac:products
(integer) 1

*常见错误

错误 原因 解决
ERR wrong number of arguments 缺少参数 提供 key 和 string 两个参数

*最佳实践

  • 在词条过期、下架或失效时及时删除,保持词典准确性
  • 批量删除时考虑使用 Pipeline 减少网络往返
  • 删除操作后词典不会自动释放空间,如需清理空词典可执行 DEL key
  • 对于敏感内容过滤,可以维护一个黑名单,通过 FT.SUGDEL 从词典中移除
  • 删除操作是幂等的,重复删除返回 0 不会报错

*FAQ

Q1: 删除词条后,FT.SUGGET 会立即生效吗? A: 是的,FT.SUGDEL 是原子操作,删除后立即生效,不会返回已删除的词条。

Q2: FT.SUGDEL 会删除所有匹配的词条吗? A: 只删除完全匹配的单个词条。如果需要清空整个词典,使用 Redis 的 DEL key 命令。

Q3: 删除后词典的内存会立即释放吗? A: 底层数据结构会进行惰性清理,内存可能不会立即释放,但词条已不可访问。

Q4: 如何批量删除多个词条? A: 使用 Redis Pipeline 或 Lua 脚本循环调用 FT.SUGDEL。也可以直接删除整个 key 后重新构建词典。