2012-12-21 57 views
5

我想使用zend lucene刪除文檔。下面是我的代碼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();

此方法在刪除前後也返回相同的計數。

任何幫助表示讚賞。

回答

3

剛剛發現問題。這個問題是由於我的代碼中的邏輯錯誤。刪除後,我調用另一個函數,再次將文檔添加到索引。當我查看文檔ID時,如果發現它在刪除後會有所不同,並且幫助我跟蹤該問題。感謝您的幫助

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在一個較小的範圍內。文檔的內部標識因此可能在索引優化期間更改爲 。

+0

我試圖優化索引。經過優化後,它將類似擴展名爲.del的文件刪除,但是在搜索索引時,刪除的文檔也會在搜索結果中返回。 –

+0

爲什麼不循環並使用'$ index->​​ isDeleted($ id)'從搜索結果中刪除已刪除的文檔。 – JSuar