5

我正在尝试使用 zend lucene 删除文档。以下是我的代码

$index = Zend_Search_Lucene::open('data/index');
foreach ($index->find('pk:' . $this->getId()) as $hit) {
        $index->delete($hit->id);
    }
$index->commit();

当我运行它并检查我的索引文件夹时,会创建一个像这样 _f4t5_1.del 的新文件

但是当我进行搜索时,已删除的文档在搜索中可用,并且还检查了

$index->​​numDocs();

此方法还在删除前后返回相同的计数。

任何帮助表示赞赏。

4

2 回答 2

3

才发现问题。问题是由于我的代码中的逻辑错误造成的。删除后,我正在调用另一个函数,该函数再次将文档添加到索引中。当我检查文档 ID 是否在删除后发现它不同时,这有助于我跟踪问题。谢谢您的帮助

于 2013-01-01T08:12:08.950 回答
2

这可能会有所帮助:php lucene 如何更新和删除索引文件中的行

您是否检查过以确保文件确实被删除了。

Zend_Search_Lucene::isDeleted($id)方法可以用来检查一个文档是否被删除。

for ($count = 0; $count < $index->maxDoc(); $count++) {
    if ($index->isDeleted($count)) {
        echo "Document #$id is deleted.\n";
    }
}

您是否尝试过运行索引优化

索引优化会删除已删除的文档并将文档的 ID 压缩到更小的范围内。因此,文档的内部 id 在索引优化期间可能会发生变化。

于 2012-12-31T18:47:52.343 回答