Programmer's Reference Guide
| Zusammenarbeit Mit Java Lucene |
Erweitert
Verwenden eines Index als statische Eigenschaft
Das Zend_Search_Lucene Objekt verwendet einen Objekt Destruktor um Änderungen mitzuteilen
und um Ressourcen zu löschen.
Es speichert hinzugefügte Dokumente im Speicher und speichert neu indizierte Segmente auf die Platte
abhängig vom MaxBufferedDocs Parameter.
Wenn das MaxBufferedDocs Limit nicht erreicht wird, gibt es einige "ungespeicherte"
Dokumente welche als neue Segmente im Objekt Destruktor gespeichert werden. Die automatische optimierungs
Prozedur des Index wird aufgerufen wenn das notwendig wird, abhängig von den MaxBufferedDocs,
MaxMergeDocs und MergeFactor Parametern.
Statische Objekt Eigenschaften (siehe anbei) werden nach der "letzten Zeile des ausgeführten Skripts" vernichtet.
<?php
class Searcher {
private static $_index;
public static function initIndex() {
self::$_index = Zend_Search_Lucene::open('path/to/index');
}
}
Searcher::initIndex();
Trotzdem wird der Objekt Destruktor für statische Eigenschaften korrekt aufgerufen und hat die Möglichkeit alles zu tun was er tun muß.
Ein potentielles Problem ist die Behandlung von Ausnahmen. Ausnahmen die vom Destruktor eines statischen Objekts geworfen werden haben keinen Inhalt, weil die Ausführung "nach dem Ende des Skripts" durchgeführt wird.
Man bekommt stattdessen in solchen Fällen eine "Fatal error: Exception thrown without a stack frame in Unknown on line 0" Fehlermeldung statt der Beschreibung der Ausnahme.
Zend_Search_Lucene bietet die Möglichkeit solche Probleme mit der commit() Methode zu
behandeln. Sie speichert alle ungespeicherten Änderungen und leert den Speicher der für das Speichern der
neuen Segmente verwendet wurde. Man kann die commit Operation jederzeit oder mehrmals während der
Ausführung des Skripts anwenden. Man kann trotzdem das Zend_Search_Lucene Objekt für das
suchen, hinzufügen oder löschen von Dokumenten nach der commit Operation verwenden. Aber der
Aufruf von commit() garantiert, das wenn nach dessen Aufruf keine Dokumente
hinzugefügt oder gelöscht werden, der Zend_Search_Lucene Destruktor nichts zu tun hat,
und keine Ausnahme werfen wird:
<?php
class Searcher {
private static $_index;
public static function initIndex() {
self::$_index = Zend_Search_Lucene::open('path/to/index');
}
...
public static function commit() {
self::$_index->commit();
}
}
Searcher::initIndex();
...
// Sktipt Shutdorn Routine
...
Searcher::commit();
...
| Zusammenarbeit Mit Java Lucene |
