我正在尝试使用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
但是当我进行搜索时,删除的文档在搜索中可用,并且还检查了
$索引 - > numDocs();
此方法在删除前后也会返回相同的计数。
感谢任何帮助。
答案 0 :(得分:3)
刚刚发现了这个问题。问题是由于我的代码中存在逻辑错误。删除后,我正在调用另一个函数,该函数再次将文档添加到索引中。当我检查文档ID时,如果发现它在删除后有所不同,这有助于我跟踪问题。谢谢你的帮助
答案 1 :(得分:2)
这可能会有所帮助:php lucene how to update and delete rows in index file
您是否检查过以确保文件已被删除。
Zend_Search_Lucene :: isDeleted($ id)方法可用于检查是否 文件已删除。
for ($count = 0; $count < $index->maxDoc(); $count++) { if ($index->isDeleted($count)) { echo "Document #$id is deleted.\n"; } }
您是否尝试过index optimization:
索引优化会删除已删除的文档并挤压文档 ID在较小的范围内。因此,文档的内部标识可能是 在索引优化期间进行更改。