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
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual