2012-12-21 13 views
5

Ich versuche ein Dokument mit Zend Lucene zu löschen. Im Folgenden ist mein CodeZend Lucene Dokument löschen Problem

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

Als ich das laufen und überprüfte meine Index-Ordner eine neue Datei wie diese _f4t5_1.del erstellt ist

Aber wenn ich eine Suche, das gelöschte Dokument verfügbar ist in die Suche und auch überprüft

$ index-> ​​numDocs();

Diese Methode gibt auch die gleiche Anzahl vor und nach dem Löschen zurück.

Jede Hilfe wird geschätzt.

Antwort

3

Nur das Problem gefunden. Das Problem war auf einen logischen Fehler in meinem Code zurückzuführen. Nach dem Löschen habe ich eine andere Funktion aufgerufen, die das Dokument wieder zum Index hinzugefügt hat. Wenn ich die Dokument-ID überprüft habe, war sie nach dem Löschen anders und das half mir, das Problem zu verfolgen. Danke für die Hilfe

2

Dies kann hilfreich sein: php lucene how to update and delete rows in index file

Haben Sie die Dokumente sicherstellen geprüft tatsächlich gelöscht werden.

Zend_Search_Lucene :: isDeleted ($ id) Verfahren verwendet werden kann, wenn ein Dokument gelöscht zu überprüfen ist.

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

Haben Sie index optimization versucht mit:

Index Optimierung entfernt gelöschte Dokumente und quetscht Dokumente IDs in einen kleineren Bereich. Die interne ID eines Dokuments kann daher während der Indexoptimierung geändert werden.

+0

Ich habe versucht, den Index zu optimieren. Bei der Optimierung wurden die Dateien wie bei der Erweiterung .del entfernt, aber beim Durchsuchen des Index werden die gelöschten Dokumente auch in den Suchergebnissen zurückgegeben. –

+0

Warum nicht durchlaufen und verwenden Sie $ index-> ​​isDeleted ($ id) ', um die gelöschten Dokumente aus den Suchergebnissen zu entfernen. – JSuar