为什么 FT.DROPINDEX 带有 DD 选项没有删除我的所有文档?

最后更新于 2024 年 5 月 11 日

问题

为什么 FT.DROPINDEX 带有 DD 选项没有删除我的所有文档?

答案

可能在索引异步进行时发生了索引删除。

如果索引创建仍在运行(FT.CREATE 正在异步运行),则只删除已索引的文档哈希。待索引的文档哈希仍保留在数据库中。要检查索引的完成情况,请使用 FT.INFO

索引时发生的错误也可能导致同样的问题。如果发生错误,文档将不会被索引,并且不会被设置了 DD 选项的 FT.DROPINDEX 命令删除。请查看以下示例。

为数值创建索引。

FT.CREATE numeric_idx PREFIX 1 cnt: SCHEMA val NUMERIC

添加两个文档。

HSET cnt:1 val 5
HSET cnt:2 val "word"

预计第二个文档不会被索引,因为 val 的值不是数字。请使用以下命令检查:

FT.INFO numeric_idx

并确认有一个文档已被索引,并且发生了失败。

 9) num_docs
10) "1"
...
41) hash_indexing_failures
42) "1"

现在,删除索引和文档,并验证只有一个文档被删除。

127.0.0.1:6379> FT.DROPINDEX numeric_idx DD
OK
127.0.0.1:6379> EXISTS cnt:1
(integer) 0
127.0.0.1:6379> EXISTS cnt:2
(integer) 1

参考

请参阅文档以了解有关 FT.DROPINDEX 的更多信息。