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

    <para>
        Suchen wird durch Verwendung der <methodname>find()</methodname> Methode durchgeführt:
    </para>

    <example id="learning.lucene.searching.search-example">
        <title>Den Index durchsuchen</title>

        <programlisting language="php"><![CDATA[
$hits = $index->find($query);

foreach ($hits as $hit) {
    printf("%d %f %s\n", $hit->id, $hit->score, $hit->title);
}
]]></programlisting>
    </example>

    <para>
        Dieses Beispiel demonstriert die Verwendung von zwei speziellen Suchtreffer Eigenschaften -
        <property>id</property> und <property>score</property>.
    </para>

    <para>
        <property>id</property> ist ein interner Dokument Identifikator der im Lucene Index
        verwendet wird. Er kann in unterschiedlichen Operationen verwendet werden, inklusive dem
        Löschen eines Dokuments vom Index:
    </para>

    <example id="learning.lucene.searching.delete-example">
        <title>Löschen eines indizierten Dokuments</title>

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

    <para>
        Oder Empfangen eines Dokuments vom Index:
    </para>

    <example id="learning.lucene.searching.retrieve-example">
        <title>Empfangen eines indizierten Dokuments</title>

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

    <note id="learning.lucene.searching.identifiers">
        <title>Interne Dokument Identifikatoren</title>

        <para>
            Wichtiger Hinweis! Interne Dokument Identifikatoren können durch eine Index Optimierung
            oder den automatischen Optimierungsprozess geändert werden, aber Sie werden niemals bei
            der Ausführung eines einzelnen Skripts geändert solange die
            <methodname>addDocument()</methodname> (welche eine automatische Optimierungsprozedur
            beinhalten kann) oder die <methodname>optimize()</methodname> Methoden aufgerufen
            werden.
        </para>
    </note>

    <para>
        Das <property>score</property> Feld sind Trefferpunkte. Such Ergebnisse werden standardmäßig
        nach Trefferpunkten sortiert (die besten Ergebnisse werden als erstes zurückgegeben).
    </para>

    <para>
        Es ist auch möglich Ergebnissets anhand von spezifischen Feldwerten zu sortieren. Siehe die
        <link linkend="zend.search.lucene.searching.sorting">
            <classname>Zend_Search_Lucene</classname> Dokumentation</link> für mehr Details über
        diese Möglichkeit.
    </para>

    <para>
        Das Beispiel demonstriert auch eine Möglichkeit um auf gespeicherte Felder zugreifen zu
        können (z.B. <command>$hit->title</command>). Beim ersten Zugriff auf jede
        Treffer-Eigenschaft, die sich von <property>id</property> oder <property>score</property>
        unterscheidet, wird jedes dokumentierte gespeicherte Feld geladen, und die
        korrespondierenden Feldwerte werden zurückgegeben.
    </para>

    <para>
        Das verursacht eine Doppeldeutigkeit für Dokumente die Ihre eigenen <property>id</property>
        oder <property>score</property> Felder haben; als Ergebnis wird empfohlen diese Feldnamen
        nicht in gespeicherten Dokumenten zu verwenden. Trotzdem kann auf Sie über die
        <methodname>getDocument()</methodname> Methode zugegriffen werden:
    </para>

    <example id="learning.lucene.searching.id-score-fields">
        <title>Zugriff auf die originalen "id" und "score" Felder von Dokumenten</title>

        <programlisting language="php"><![CDATA[
$id    = $hit->getDocument()->id;
$score = $hit->getDocument()->score;
]]></programlisting>
    </example>
</sect1>
