<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="learning.lucene.intro">
    <title>Einführung in Zend_Search_Lucene</title>

    <para>
        Die Komponente <classname>Zend_Search_Lucene</classname> ist dazu gedacht eine sofort
        verwendbare Volltext Suchlösung anzubieten. Es benötigt keine <acronym>PHP</acronym>
        Erweiterungen<footnote><para>Obwohl einige <acronym>UTF-8</acronym> bearbeitenden
        Funktionalitäten die <emphasis>mbstring</emphasis> Erweiterung aktiviert
        benötigen</para></footnote> und auch keine zusätzlich installierte Software, und kann sofort
        nach der Installation von Zend Framework verwendet werden.
    </para>

    <para>
        <classname>Zend_Search_Lucene</classname> ist eine reine <acronym>PHP</acronym> Portierung
        der populären Open Source Volltext Such Maschine auch bekannt als Apache Lucene. Siehe
        <ulink url="http://lucene.apache.org">http://lucene.apache.org/</ulink> für Details.
    </para>

    <para>
        Die Information vor einer Suche muss indiziert werden.
        <classname>Zend_Search_Lucene</classname> und Java Lucene verwenden ein Dokumenten Konzept
        welches als "atomar indiziertes Element" bekannt ist.
    </para>

    <para>
        Jedes Dokument ist ein Set von Feldern: &lt;name, value&gt; Paaren wobei Name und Wert
        <acronym>UTF-8</acronym> String<footnote><para>Binäre String können auch als Feldwerte
        verwendet werden</para></footnote> sind. Jedes Subset von Dokumentfeldern kann als
        "indiziert" markiert werden um Felddaten in den Text-Indizierungs Prozess einzufügen.
    </para>

    <para>
        Feldwerte können wärend des Indizierens in Token übersetzt werden. Wenn ein Feld nicht in
        Token übersetzt wird, dann wird der Feldwert als ein Ausdruck gespeichert; andernfalls wird
        der aktuelle Analysator für die Übersetzung in Token verwendet.
    </para>

    <para>
        Verschiedene Analysatoren werden im <classname>Zend_Search_Lucene</classname> Paket
        angeboten. Der Standard Analysator arbeitet mit <acronym>ASCII</acronym> Text (da der
        <acronym>UTF-8</acronym> Analysator die Aktivierung der <emphasis>mbstring</emphasis>
        Erweiterung benötigt). Er ist unabhängig von der Schreibweise und überspringt Nummern.
        Um dieses Verhalten zu verändern kann entweder ein anderer Analysator verwendet, oder
        ein eigener Analysator erstellt werden.
    </para>

    <note>
        <title>Verwendung von Analysatoren wärend der Indizierung und Suche</title>

        <para>
            Wichtiger Hinweis! Suchabfragen werden auch durch Verwendung des "aktuellen Analysators"
            in Token übersetzt, so dass der selbe Analysator als Standard gesetzt sein muss, sowohl
            für die Indizierung als auch den Suchprozess. Das garantiert das Quelle und durchsuchter
            Text auf die selbe Art und Weise in Ausdrücke umgewandelt werden.
        </para>
    </note>

    <para>
        Feldwerte werden optional in einem Index gespeichert. Das erlaubt es die originalen
        Felddaten vom Index zu empfangen wärend gesucht wird. Das ist der einzige Weg um
        Suchregebnisse mit den originalen Daten zu assoziieren (die interne Dokumenten ID kann sich
        wärend einer Indexoptimierung oder einer automatischen Optimierung verändern).
    </para>

    <para>
        Es sollte daran gedacht werden das ein Lucene Index keine Datenbank ist. Er bietet keinen
        Index Backup Mechanismus ausser dem Backup des Dateisystem Verzeichnisses. Er bietet keinen
        Transaktions Mechanismus aber gleichzeitigen Indexupdates sowie gleichzeitiges
        Aktualisieren und Lesen wird unterstützt. Er kann auch nicht mit Datenbanken in Bezug auf
        die Geschwindigkeit beim Empfangen von Daten verglichen werden.
    </para>

    <para>
        Deshalb ist es eine gute Idee:
        So it's good idea:
    </para>

    <itemizedlist>
        <listitem>
            <para>
                den Lucene Index <emphasis>nicht</emphasis> als Speicher zu verwenden da sich
                hierbei die Geschwindigkeit für das Empfangen von Suchtreffern dramatisch
                verringern kann. Nur eindeutige Dokument Identifikatoren (Dokumentenpfade,
                <acronym>URL</acronym>s, und eindeutige Datenbank IDs) sollen gespeichert und Daten
                in einem Index assoziiert werden, z.B. Titel, Hinweise, Kategorie, Sprachinfos,
                Avatar. (Zu beachten: Ein Feld kann beim Indizieren eingefügt werden, aber nicht
                gespeichert, oder gespeichert, aber nicht indiziert).
            </para>
        </listitem>

        <listitem>
            <para>
                Um Funktionalitäten zu schreiben die einen Index komplett neu erstellen können wenn
                er aus irgendeinem Grund korrupt ist.
            </para>
        </listitem>
    </itemizedlist>

    <para>
        Individuelle Dokumente in einem Index können komplett unterschiedliche Sets an Feldern
        haben. Die selben Felder in unterschiedlichen Dokumenten müssen nicht die gleichen
        Attribute haben. Z.B. kann ein Feld für ein Dokument indiziert sein und für ein anderes
        wird die Indizierung übersprungen. Das gleiche trifft auch für das Speicher, die Umwandlung
        in Token oder der Behandlung von Feldwerten als binärer String zu.
    </para>
</sect1>
