<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="learning.lucene.indexing">
    <title>Indizierung</title>

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

    <programlisting language="php"><![CDATA[
$index->addDocument($doc);
]]></programlisting>

    <para>
        Es gibt zwei Wege Dokument Objekte zu erstellen. Der erste ist es manuell zu tun.
    </para>

    <example id="learning.lucene.indexing.doc-creation">
        <title>Manuelle Dokument Erstellung</title>

        <programlisting language="php"><![CDATA[
$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));
]]></programlisting>
    </example>

    <para>
        Die zweite Methode ist das Laden von <acronym>HTML</acronym> oder von Microsoft Office 2007
        Dateien:
    </para>

    <example id="learning.lucene.indexing.doc-loading">
        <title>Laden vom Dokument</title>

        <programlisting language="php"><![CDATA[
$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);
]]></programlisting>
    </example>

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

    <sect2 id="learning.lucene.indexing.policy">
        <title>Indizierungs Policy</title>

        <para>
            Man sollte eine Indizierungs Policy im Architektur Design der eigenen Anwendung
            definieren.
        </para>

        <para>
            Man könnte eine auf-Wunsch Index Konfiguration benötigen (etwas wie ein
            <acronym>OLTP</acronym> System). In solchen Systemen wird pro Benutzeranfrage
            normalerweise ein Dokument hinzugefügt. Daher beeinflusst die
            <emphasis>MaxBufferedDocs</emphasis> Option das System nicht. Auf der anderen Seite ist
            <emphasis>MaxMergeDocs</emphasis> wirklich nützlich da es erlaubt die maximale
            Ausführungszeit des Skripts zu begrenzen. <emphasis>MergeFactor</emphasis> 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).
        </para>

        <para>
            Wenn man primär Batch Indexaktualisierungen durchführt sollte die eigene Konfiguration
            eine <emphasis>MaxBufferedDocs</emphasis> Option setzen welche auf den maximalen Wert
            gesetzt wird der vom vorhandenen Speicherplatz unterstützt wird.
            <emphasis>MaxMergeDocs</emphasis> und <emphasis>MergeFactor</emphasis> müssen auf Werte
            gesetzt werden welche die Einflussnahme durch automatische Optimierung so stark wie
            möglich reduziert <footnote><para>Ein zusätzliches Limit sind die maximal vom
                Betriebssystem unterstützten Dateihandler für gleichzeitig geöffnete
                Operationen</para></footnote>. Die komplette Indexoptimierung sollte nach der
            Indizierung durchgeführt werden.
        </para>

        <example id="learning.lucene.indexing.optimization">
            <title>Index Optimierung</title>

            <programlisting language="php"><![CDATA[
$index->optimize();
]]></programlisting>
        </example>

        <para>
            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.
        </para>
    </sect2>
</sect1>
