<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="learning.lucene.queries">
    <title>Requêtes supportées</title>

    <para>
        <classname>Zend_Search_Lucene</classname> et Lucene Java supportent un langage de requête
        puissant.
        Il permet de rechercher des termes individuels, des phrases, des ensembles de termes ;
        en utilisant des jokers ou des recherches floues ; en combinant des requêtes à l'aide
        d'opérateurs booléens et ainsi de suite.
    </para>

    <para>
        Une description détaillée du langage de requête peut être trouvé dans la documentation du
        composant <link
            linkend="zend.search.lucene.query-language">
            Zend_Search_Lucene</link>.
    </para>

    <para>
        Ci-dessous, des exemples de quelques requêtes types communes et de stratégies.
    </para>

    <example id="learning.lucene.queries.keyword">
        <title>Effectuer une requête pour un mot seul</title>

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

        <para>
            Recherche le mot "hello" à travers les champs de tous les documents.
        </para>
    </example>

    <note>
        <title>Champ de recherche par défaut</title>

        <para>
            Note importante ! Lucene Java recherche uniquement dans les champs de "contenu" par
            défaut, mais <classname>Zend_Search_Lucene</classname> recherche à travers
            <emphasis>tous</emphasis> les champs. Ce comportement peut être modifié en utilisant
            la méthode <methodname>Zend_Search_Lucene::setDefaultSearchField($fieldName)</methodname>.
        </para>
    </note>

    <example id="learning.lucene.queries.multiple-words">
        <title>Effectuer une recherche de mots multiples</title>

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

        <para>
            Recherche deux mots. Les deux mots sont facultatifs, au moins l'un des deux doit être
            présent dans le résultat
        </para>
    </example>

    <example id="learning.lucene.queries.required-words">
        <title>Mots requis dans une requête</title>

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

        <para>
            Recherche deux mots ; "hello" est requis, "dolly" est facultatif.
        </para>
    </example>

    <example id="learning.lucene.queries.prohibited-words">
        <title>Interdire des mots dans les documents recherchés</title>

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

        <para>
            Recherche avec deux mots ; "hello" est requis, 'dolly' est interdit. En d'autres termes,
            si le document contient "hello", mais contient aussi le mot "dolly", il ne sera pas
            retourné dans l'ensemble de résultats.
        </para>
    </example>

    <example id="learning.lucene.queries.phrases">
        <title>Rechercher des phrases</title>

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

        <para>
            Recherche de la phrases "hello dolly" ; un document correspond uniquement si la chaine
            exacte est présente.
        </para>
    </example>

    <example id="learning.lucene.queries.fields">
        <title>Effectuer des recherches dans des champs en particulier</title>

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

        <para>
            Recherche la phrase "The Right Way" au sein du champ <property>title</property> et le mot
            "go" dans la propriété <property>text</property>.
        </para>
    </example>

    <example id="learning.lucene.queries.fields-and-document">
        <title>Effectuer des recherches dans des champs en particulier aussi bien que dans le
        document complet</title>

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

        <para>
            Recherche la phrase "The Right Way" dans la propriété <property>title</property> et le
            mot "go" dans tous les champs du document.
        </para>
    </example>

    <example id="learning.lucene.queries.fields-and-document-alt">
        <title>Effectuer des recherches dans des champs en particulier aussi bien que dans le
        document complet (Alternatif)</title>

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

        <para>
            Recherche le mot "Do" dans la propriété <property>title</property> et les mots "it" and
            "right" dans tous les champs ; si l'un d'entre eux correspond, le document correspondra
            à un résultat de recherche.
        </para>
    </example>

    <example id="learning.lucene.queries.wildcard-question">
        <title>Faire des requêtes avec le joker "?"</title>

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

        <para>
            Recherche les mots correspondants au motif "te?t", où "?" est n'importe quel caractère
            unique.
        </para>
    </example>

    <example id="learning.lucene.queries.wildcard-asterisk">
        <title>Faire des requêtes avec le joker  "*"</title>

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

        <para>
            Recherche les mots correspondants au motif "test*", où "*" est n'importe quelle séquence
            de 0 caractère ou plus.
        </para>
    </example>

    <example id="learning.lucene.queries.range-inclusive">
        <title>Rechercher une gamme inclusive de termes</title>

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

        <para>
            Recherche la gamme de termes (inclusif).
        </para>
    </example>

    <example id="learning.lucene.queries.range-exclusive">
        <title>Rechercher une gamme exclusive de termes</title>

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

        <para>
            Recherche la gamme de termes (exculsif).
        </para>
    </example>

    <example id="learning.lucene.queries.fuzzy">
        <title>Recherches floues</title>

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

        <para>
            Recherche foue pour le mot "roam".
        </para>
    </example>

    <example id="learning.lucene.queries.boolean">
        <title>Recherches booléennes</title>

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

        <para>
            Requête booléenne.
        </para>
    </example>

    <para>
        Toutes les requêtes supportées peuvent être construites via
        l'<link linkend="zend.search.lucene.query-api">API de construction de requêtes</link> de
        <classname>Zend_Search_Lucene</classname>. De plus l'analyse et la construction de requêtes
        peuvent être combinées :
    </para>

    <example id="learning.lucene.queries.combining">
        <title>Combinaison d'analyse et de construction de requêtes</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>
