*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 版本的计划输出格式可能有细微差异。