*Redis FT.EXPLAINCLI 命令

FT.EXPLAINCLI 返回格式化后的 RediSearch 查询执行计划,适合终端阅读。


*语法

FT.EXPLAINCLI index query
  [DIALECT dialect]
  [PARAMS name value [name value ...]]

*参数说明

参数 类型 必填 说明
index String 索引名称
query String 查询字符串
DIALECT Integer 查询语法版本(1 或 2)
PARAMS Keyword 查询参数替换

*返回值

  • Array:查询执行计划的字符串数组,每行一个元素

*时间复杂度

O(1),仅解析查询生成计划。


*示例

*基本查询计划

> FT.EXPLAINCLI idx:products "redis"
1) "INTERSECT {"
2) "  redis"
3) "}"

*复杂查询计划

> FT.EXPLAINCLI idx:products "(phone | tablet) @price:[100 500]"
1) "INTERSECT {"
2) "  UNION {"
3) "    phone"
4) "    tablet"
5) "  }"
6) "  NUMERIC {100.000000 <= @price <= 500.000000}"
7) "}"

*使用 DIALECT 2

> FT.EXPLAINCLI idx:products "@name:(redis*)" DIALECT 2
1) "TAG:@name {"
2) "  PREFIX {redis*}"
3) "}"

*常见错误

错误 原因 解决
Index not found 索引不存在 确认索引名称
Syntax error 查询语法错误 检查查询字符串格式

*最佳实践

  • 终端调试时优先使用 EXPLAINCLI,阅读体验更佳
  • 分析计划时关注嵌套深度和运算符类型
  • 配合 DIALECT 2 查看现代语法执行计划

*FAQ

Q1: FT.EXPLAINCLI 和 FT.EXPLAIN 返回内容一样吗? A: 逻辑内容相同,但 EXPLAINCLI 以数组形式返回,每行独立,更易读。

Q2: 客户端库如何展示 EXPLAINCLI 结果? A: 将数组元素按行拼接,即可得到格式化的树形输出。

Q3: 输出格式会随版本变化吗? A: 可能会,不同 RediSearch 版本的计划输出格式可能有细微差异。