# Indizierung

Indizierung wird durch das Hinzufügen eines neuen Dokuments zu einem bestehenden oder neuen Index durchgeführt:

    $index->addDocument($doc);

Es gibt zwei Wege Dokument Objekte zu erstellen. Der erste ist es manuell zu tun.

Manuelle Dokument Erstellung

    $doc = new Zend_Search_Lucene_Document();
    $doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
    $doc->addField(Zend_Search_Lucene_Field::Text('title', $docTitle));
    $doc->addField(Zend_Search_Lucene_Field::unStored('contents', $docBody));
    $doc->addField(Zend_Search_Lucene_Field::binary('avatar', $avatarData));

Die zweite Methode ist das Laden von HTML oder von Microsoft Office 2007 Dateien:

Laden vom Dokument

    $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
    $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($path);
    $doc = Zend_Search_Lucene_Document_Pptx::loadPptFile($path);
    $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($path);

Wenn ein Dokument von einem der unterstützten Formate geladen wird, kann es trotzdem noch manuell mit einem neuen benutzerdefinierten Feld erweitert werden.

## Indizierungs Policy

Man sollte eine Indizierungs Policy im Architektur Design der eigenen Anwendung definieren.

Man könnte eine auf-Wunsch Index Konfiguration benötigen (etwas wie ein OLTP System). In solchen Systemen wird pro Benutzeranfrage normalerweise ein Dokument hinzugefügt. Daher beeinflusst die MaxBufferedDocs Option das System nicht. Auf der anderen Seite ist MaxMergeDocs wirklich nützlich da es erlaubt die maximale Ausführungszeit des Skripts zu begrenzen. MergeFactor sollte auf einen Wert gesetzt werden der die Balance zwischen der durchschnittlichen Indizierungszeit (sie beeinflusst auch die durchschnittliche automatische Optimierungszeit) und der Geschwindigkeit der Suche hält (Das Level der Index Optimierung ist abhängig von der Anzahl der Segmente).

Wenn man primär Batch Indexaktualisierungen durchführt sollte die eigene Konfiguration eine MaxBufferedDocs Option setzen welche auf den maximalen Wert gesetzt wird der vom vorhandenen Speicherplatz unterstützt wird. MaxMergeDocs und MergeFactor müssen auf Werte gesetzt werden welche die Einflussnahme durch automatische Optimierung so stark wie möglich reduziert

Ein zusätzliches Limit sind die maximal vom Betriebssystem unterstützten Dateihandler für gleichzeitig geöffnete Operationen

. Die komplette Indexoptimierung sollte nach der Indizierung durchgeführt werden.

Index Optimierung

    $index->optimize();

In einigen Konfigurationen ist es effizienter Indexaktualisierungen zu serialisieren indem Updateanfragen in einer Queue organisiert werden und verschiedene Updateanfragen in einer einzelnen Skriptausführung bearbeitet werden. Das reduziert den Overhead des öffnens vom Index und erlaubt die Verwendung von Buffern für die Index Dokumente.