为什么使用 DD 选项的 FT.DROPINDEX 命令没有删除我所有的文档?

最后更新时间: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 的更多信息。