<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="learning.lucene.queries">
    <title>Unterstützte Abfragen</title>

    <para>
        <classname>Zend_Search_Lucene</classname> und Java Lucene unterstützen eine mächtige
        Abfragesprache. Sie erlaubt das Suchen nach individuellen Ausdrücken, Phrasen, Bereichen von
        Ausdrücken; verwendung von Wildcards und Undeutliche (Fuzzy) Suchen; Kombination von
        Abfragen durch Verwendung boolscher Operatoren; und so weiter.
    </para>

    <para>
        Eine detailierte Beschreibung der Abfragesprache kann in der <link
            linkend="zend.search.lucene.query-language">Dokumentation der Komponente
            Zend_Search_Lucene</link> gefunden werden.
    </para>

    <para>
        Nachfolgend sind einige Beispiel von üblichen Abfragetypen und Strategien.
    </para>

    <example id="learning.lucene.queries.keyword">
        <title>Abfragen nach einem einfachen Wort</title>

        <programlisting language="text"><![CDATA[
hello
]]></programlisting>

        <para>
            Sucht nach dem Wort "hello" durch alle Dokumentfelder.
        </para>
    </example>

    <note>
        <title>Standardmäßige Suchfelder</title>

        <para>
            Wichtige Notiz! Java Lucene sucht standardmäßig nur nach den "contents" Feldern, aber
            <classname>Zend_Search_Lucene</classname> sucht durch <emphasis>alle</emphasis> Felder.
            Dieses Verhalten kann geändert werden indem die Methode
            <methodname>Zend_Search_Lucene::setDefaultSearchField($fieldName)</methodname> verwendet
            wird.
        </para>
    </note>

    <example id="learning.lucene.queries.multiple-words">
        <title>Abfrage nach mehreren Worten</title>

        <programlisting language="text"><![CDATA[
hello dolly
]]></programlisting>

        <para>
            Sucht nach zwei Worten. Beide Worte sind optional; zumindest eines von Ihnen muss im
            Ergebnis vorhanden sein.
        </para>
    </example>

    <example id="learning.lucene.queries.required-words">
        <title>Worte in einer Abfrage erzwingen</title>

        <programlisting language="text"><![CDATA[
+hello dolly
]]></programlisting>

        <para>
            Sucht nach zwei Worten; "hello" wird benötigt, "dolly" ist optional.
        </para>
    </example>

    <example id="learning.lucene.queries.prohibited-words">
        <title>Wörter in abgefragten Dokumenten verhindern</title>

        <programlisting language="text"><![CDATA[
+hello -dolly
]]></programlisting>

        <para>
            Sucht nach zwei Worten; "hello" wird benötigt, "dolly" ist verboten. Mit anderen Worten,
            wenn das Dokument auf "hello" passt aber das Wort "dolly" enthält wird es nicht im
            gefundenen Set zurückgegeben.
        </para>
    </example>

    <example id="learning.lucene.queries.phrases">
        <title>Abfrage nach Phrasen</title>

        <programlisting language="text"><![CDATA[
"hello dolly"
]]></programlisting>

        <para>
            Suche nach der Phrase "hello dolly"; ein Dokument entspricht nur wenn der exakte String
            vorhanden ist.
        </para>
    </example>

    <example id="learning.lucene.queries.fields">
        <title>Abfrage nach spezifischen Feldern</title>

        <programlisting language="text"><![CDATA[
title:"The Right Way" AND text:go
]]></programlisting>

        <para>
            Sucht die Phrase "The Right Way" im <property>title</property> Feld und das Wort "go"
            im <property>text</property> Feld.
        </para>
    </example>

    <example id="learning.lucene.queries.fields-and-document">
        <title>Abfrage nach speziellen Feldern sowie im kompletten Dokument</title>

        <programlisting language="text"><![CDATA[
title:"The Right Way" AND  go
]]></programlisting>

        <para>
            Sucht die Phrase "The Right Way" im Feld <property>title</property> und das Word "go"
            welches in irgendeinem Feld des Dokuments vorkommt.
        </para>
    </example>

    <example id="learning.lucene.queries.fields-and-document-alt">
        <title>Abfrage nach speziellen Feldern sowie im kompletten Dokument (alternativ)</title>

        <programlisting language="text"><![CDATA[
title:Do it right
]]></programlisting>

        <para>
            Sucht nach dem Wort "Do" im Feld <property>title</property> und die Wörter "it" und
            "right" über alle Felder; jeder einzelne der entspricht führt zu einem passenden
            Dokument.
        </para>
    </example>

    <example id="learning.lucene.queries.wildcard-question">
        <title>Abfrage mit der Wildcard "?"</title>

        <programlisting language="text"><![CDATA[
te?t
]]></programlisting>

        <para>
            Sucht nach Worten die dem Pattern "te?t" entsprechen, wobei "?" jedes einzelne Zeichen
            ist.
        </para>
    </example>

    <example id="learning.lucene.queries.wildcard-asterisk">
        <title>Abfrage mit dem Wildcard "*"</title>

        <programlisting language="text"><![CDATA[
test*
]]></programlisting>

        <para>
            Sucht nach Worten welche dem Pattern "test*" entsprechen wobei "*" jede Sequenz von null
            oder mehr Zeichen entspricht.
        </para>
    </example>

    <example id="learning.lucene.queries.range-inclusive">
        <title>Abfrage nach einem inklusiven Bereich von Ausdrücken</title>

        <programlisting language="text"><![CDATA[
mod_date:[20020101 TO 20030101]
]]></programlisting>

        <para>
            Sucht nach einem Bereich von Ausdrücken (inklusive).
        </para>
    </example>

    <example id="learning.lucene.queries.range-exclusive">
        <title>Abfrage nach einem exklusiven Bereich von Ausdrücken</title>

        <programlisting language="text"><![CDATA[
title:{Aida to Carmen}
]]></programlisting>

        <para>
            Sucht nach einem Bereich von Ausdrücken (exklusive).
        </para>
    </example>

    <example id="learning.lucene.queries.fuzzy">
        <title>Undeutliche Suchen</title>

        <programlisting language="text"><![CDATA[
roam~
]]></programlisting>

        <para>
            Sucht undeutlich nach dem Word "roam".
        </para>
    </example>

    <example id="learning.lucene.queries.boolean">
        <title>Boolsche Suchen</title>

        <programlisting language="text"><![CDATA[
(framework OR library) AND php
]]></programlisting>

        <para>
            Boolsche Abfrage.
        </para>
    </example>

    <para>
        Alle unterstützten Abfragen können durch <classname>Zend_Search_Lucene</classname>'s
        <link linkend="zend.search.lucene.query-api">Abfrage Erstellungs API</link> erstellt werden.
        Weiters können Parsen von Abfrage und Abfrage Erstellung kombiniert werden:
    </para>

    <example id="learning.lucene.queries.combining">
        <title>Kombinieren von geparsted und erstellten Abfragen</title>

        <programlisting language="php"><![CDATA[
$userQuery = Zend_Search_Lucene_Search_QueryParser::parse($queryStr);

$query = new Zend_Search_Lucene_Search_Query_Boolean();
$query->addSubquery($userQuery, true  /* required */);
$query->addSubquery($constructedQuery, true  /* required */);
]]></programlisting>
    </example>
</sect1>
