Programmer's Reference Guide

Zusammenarbeit Mit Java Lucene

Erweitert

Den Index als statische Eigenschaft verwenden

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 in der Destruktor Methode des Objektes gespeichert werden. Die automatische Optimierungsprozedur des Index wird aufgerufen wenn das notwendig wird, abhängig von den MaxBufferedDocs, MaxMergeDocs und MergeFactor Parametern.

Statische Objekteigenschaften (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();
            

Auf die gleiche Art und Weise wird der Objektdestruktor für statische Eigenschaften an dieser Stelle des Programablaufes korrekt aufgerufen.

Ein potentielles Problem ist die Behandlung von Ausnahmen. Ausnahmen die vom Destruktor eines statischen Objekts geworfen werden haben keinen Inhalt, weil der Destruktor ausgeführt wird nachdem das Skript bereits beendet wurde.

Man kann in solchen Fällen eine "Fatal error: Exception thrown without a stack frame in Unknown on line 0" Fehlermeldung statt der Beschreibung einer Ausnahme sehen.

Zend_Search_Lucene bietet einen Workaround zu diesem Problem, mit der commit() Methode, an. Diese speichert alle ungespeicherten Änderungen und leert den Speicher der für das Speichern der neuen Segmente verwendet wird. Man kann die commit Operation jederzeit oder auch mehrmals während der Ausführung des Skripts anwenden. Man kann das Zend_Search_Lucene Objekt trotzdem 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 dem Aufruf von commit() keine Dokumente hinzugefügt oder gelöscht werden, der Destruktor von Zend_Search_Lucene nichts zu tun hat, und er deswegen keine Ausnahme wirft:

<?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