[ZF-10089] Zend_Log
[zend.git] / documentation / manual / fr / module_specs / Zend_Search_Lucene-Queries.xml
blobc2d096a356627e31d5cac70652486e4cfd6263d7
1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- EN-Revision: 21829 -->
3 <!-- Reviewed: no -->
4 <sect1 id="zend.search.lucene.query-api">
5     <title>API de construction de requêtes</title>
6     <para>
7         En plus du parsage automatique d'une requête en chaîne de caractères, il est également possible de construire
8         cette requête à l'aide de l'<acronym>API</acronym> de requête.
9     </para>
10     <para>
11         Les requêtes utilisateur peuvent être combinées avec les requêtes créées à travers l'API de requêtes.
12         Utilisez simplement le parseur de requêtes pour construire une requête à partir d'une chaîne :
13         <programlisting language="php"><![CDATA[
14 $query = Zend_Search_Lucene_Search_QueryParser::parse($queryString);
15 ]]></programlisting>
16     </para>
17     <sect2 id="zend.search.lucene.queries.exceptions">
18         <title>Les Exceptions du parseur de requêtes</title>
19         <para>
20         Le parseur de requêtes peut générer deux types d'exceptions :
21         <itemizedlist>
22             <listitem>
23                 <para>
24                     Une <classname>Zend_Search_Lucene_Exception</classname> est levée si quelque-chose d'anormal se produit dans le
25                     parseur même.
26                 </para>
27             </listitem>
28             <listitem>
29                 <para>
30                     Une <classname>Zend_Search_Lucene_Search_QueryParserException</classname> est levée s'il y a une erreur dans la syntaxe de la requête.
31                 </para>
32             </listitem>
33         </itemizedlist>
34         C'est une bonne idée d'attraper les <classname>Zend_Search_Lucene_Search_QueryParserException</classname>s et
35         de les traiter de manière appropriée :
36         <programlisting language="php"><![CDATA[
37 try {
38     $query = Zend_Search_Lucene_Search_QueryParser::parse($queryString);
39 } catch (Zend_Search_Lucene_Search_QueryParserException $e) {
40     echo "Query syntax error: " . $e->getMessage() . "\n";
42 ]]></programlisting>
43         </para>
44         <para>
45             La même technique devrait être utilisée pour la méthode find() d'un objet <classname>Zend_Search_Lucene</classname>.
46         </para>
47         <para>
48             Depuis la version 1.5, les exceptions de parsage de requête sont supprimées par défaut. Si la requête ne
49             respecte pas le langage de requêtes, elle est "tokenizée" à l'aide de l'analyseur par défaut et tous les
50             termes "tokenizés" sont utilisés dans la recherche.
51             Pour activer les exceptions, utilisez <methodname>Zend_Search_Lucene_Search_QueryParser::dontSuppressQueryParsingExceptions()</methodname>.
52             Les méthodes <methodname>Zend_Search_Lucene_Search_QueryParser::suppressQueryParsingExceptions()</methodname> et
53             <methodname>Zend_Search_Lucene_Search_QueryParser::queryParsingExceptionsSuppressed()</methodname>
54             sont également destinées à gérer le comportement de gestion des exceptions.
55         </para>
56     </sect2>
57     <sect2 id="zend.search.lucene.queries.term-query">
58         <title>Requête sur un terme</title>
59         <para>
60             Les requêtes de termes peuvent être utilisées pour une recherche
61             sur un seul terme.
62         </para>
63         <para>
64         Requête par chaîne de caractères:
65         </para>
66         <programlisting language="querystring"><![CDATA[
67 word1
68 ]]></programlisting>
69         <para>ou</para>
70         <para>
71         Construction de la requête via l'<acronym>API</acronym>:
72         </para>
73         <programlisting language="php"><![CDATA[
74 $term  = new Zend_Search_Lucene_Index_Term('word1', 'field1');
75 $query = new Zend_Search_Lucene_Search_Query_Term($term);
76 $hits  = $index->find($query);
77 ]]></programlisting>
78         <para>
79             L'argument field est optionnel. <classname>Zend_Search_Lucene</classname> cherche dans
80             tous les champs indexés si aucun champ n'a été spécifié :
81             <programlisting language="php"><![CDATA[
82 // Recherche de 'word1' dans tous les champs indexés.
83 $term  = new Zend_Search_Lucene_Index_Term('word1');
84 $query = new Zend_Search_Lucene_Search_Query_Term($term);
85 $hits  = $index->find($query);
86 ]]></programlisting>
87         </para>
88     </sect2>
89     <sect2 id="zend.search.lucene.queries.multiterm-query">
90         <title>Requête multi-termes</title>
91         <para>
92             Les requêtes multi-termes peuvent être utilisées pour chercher sur une
93             collection de termes.
94         </para>
95         <para>
96             Chaque terme dans une collection peut être défini comme <emphasis>requis</emphasis>,
97             <emphasis>interdit</emphasis>, ou <emphasis>aucun des deux</emphasis>.
98             <itemizedlist>
99                 <listitem>
100                     <para>
101                         <emphasis>requis</emphasis> signifie que les documents ne correspondant pas
102                         au terme ne correspondront pas à la requête;
103                     </para>
104                 </listitem>
105                 <listitem>
106                     <para>
107                         <emphasis>interdit</emphasis> signifie que les documents correspondant
108                         au terme ne correspondront pas à la requête;
109                     </para>
110                 </listitem>
111                 <listitem>
112                     <para>
113                         <emphasis>aucun des deux</emphasis>, dans ce cas les documents n'ont pas
114                         l'interdiction, ni l'obligation de correspondre au terme. Cela dit, un document
115                         devra correspondre au moins à l'un des termes pour correspondre à la requête.
116                     </para>
117                 </listitem>
118             </itemizedlist>
119         </para>
120         <para>
121             Si des termes optionnels sont ajoutés à une requête possédant des termes requis,
122             les deux requêtes auront les mêmes résultats, mais les termes optionnels pourraient
123             influer sur le score des documents retournés.
124         </para>
125         <para>
126             Les deux méthodes de recherche peuvent être utilisées pour les requêtes multi-termes.
127         </para>
128         <para>
129             Requête par chaîne de caractères:
130         </para>
131         <programlisting language="querystring"><![CDATA[
132 +word1 author:word2 -word3
133 ]]></programlisting>
134         <itemizedlist>
135             <listitem>
136                 <para>
137                     '+' est utilisé pour définir un terme requis.
138                 </para>
139             </listitem>
140             <listitem>
141                 <para>
142                     '-' est utilisé pour définir un terme interdit.
143                 </para>
144             </listitem>
145             <listitem>
146                 <para>
147                     Le préfixe 'field:' est utilisé pour indiqué un champ sur lequel on veut chercher.
148                     S'il est omis, la recherche se fera sur tous les champs.
149                 </para>
150             </listitem>
151         </itemizedlist>
152         <para>or</para>
153         <para>
154         Construction de la requête via l'<acronym>API</acronym>:
155         </para>
156         <programlisting language="php"><![CDATA[
157 $query = new Zend_Search_Lucene_Search_Query_MultiTerm();
158 $query->addTerm(new Zend_Search_Lucene_Index_Term('word1'), true);
159 $query->addTerm(new Zend_Search_Lucene_Index_Term('word2', 'author'),
160                 null);
161 $query->addTerm(new Zend_Search_Lucene_Index_Term('word3'), false);
162 $hits  = $index->find($query);
163 ]]></programlisting>
164         <para>
165             Il est également possible de spécifier des listes de termes dans le contructeur de la requête multi-termes :
166             <programlisting language="php"><![CDATA[
167 $terms = array(new Zend_Search_Lucene_Index_Term('word1'),
168                new Zend_Search_Lucene_Index_Term('word2', 'author'),
169                new Zend_Search_Lucene_Index_Term('word3'));
170 $signs = array(true, null, false);
171 $query = new Zend_Search_Lucene_Search_Query_MultiTerm($terms, $signs);
172 $hits  = $index->find($query);
173 ]]></programlisting>
174         </para>
175         <para>
176             Le tableau <varname>$signs</varname> contient des informations sur le type de chaque terme :
177             <itemizedlist>
178                 <listitem>
179                     <para>
180                         <constant>TRUE</constant> est utilisé pour définir un terme requis.
181                     </para>
182                 </listitem>
183                 <listitem>
184                     <para>
185                         <constant>FALSE</constant> est utilisé pour définir un terme interdit.
186                     </para>
187                 </listitem>
188                 <listitem>
189                     <para>
190                         <constant>NULL</constant> est utilisé pour définir un terme qui n'est ni
191                         requis, ni interdit.
192                     </para>
193                 </listitem>
194             </itemizedlist>
195         </para>
196     </sect2>
197     <sect2 id="zend.search.lucene.queries.boolean-query">
198         <title>Requête booléene</title>
199         <para>
200             Les requêtes booléenes permettent de construire une requête qui utilise d'autres requêtes
201             et des opérateurs booléens.
202         </para>
203         <para>
204             Chaque sous-requête dans une collection peut être définie comme <emphasis>requis</emphasis>,
205             <emphasis>interdit</emphasis>, ou <emphasis>optionnel</emphasis>.
206             <itemizedlist>
207                 <listitem>
208                     <para>
209                         <emphasis>requis</emphasis> signifie que les documents ne correspondant pas
210                         à la sous-requête ne correspondront pas à la requête;
211                     </para>
212                 </listitem>
213                 <listitem>
214                     <para>
215                         <emphasis>interdit</emphasis> signifie que les documents correspondant
216                         à la sous-requête ne correspondront pas à la requête;
217                     </para>
218                 </listitem>
219                 <listitem>
220                     <para>
221                         <emphasis>optionel</emphasis>, dans ce cas les documents n'ont pas
222                         l'interdiction, ni l'obligation de correspondre à la sous-requête. Cela dit, un document
223                         devra correspondre au moins à l'une des sous-requêtes pour correspondre à la requête.
224                     </para>
225                 </listitem>
226             </itemizedlist>
227         </para>
228         <para>
229             Si des sous-requêtes optionnelles sont ajoutées à une requête possédant des sous-requêtes requises,
230             les deux requêtes auront les mêmes résultats, mais les sous-requêtes optionnelles pourraient
231             influer sur le score des documents retournés.
232         </para>
233         <para>
234             Les deux méthodes de recherche peuvent être utilisées pour les requêtes booléenes.
235         </para>
236         <para>
237             Requête par chaîne de caractères:
238         </para>
239         <programlisting language="querystring"><![CDATA[
240 +(word1 word2 word3) (author:word4 author:word5) -(word6)
241 ]]></programlisting>
242         <itemizedlist>
243             <listitem>
244                 <para>
245                     '+' est utilisé pour définir une sous-requêtes requise.
246                 </para>
247             </listitem>
248             <listitem>
249                 <para>
250                     '-' est utilisé pour définir une sous-requêtes interdite.
251                 </para>
252             </listitem>
253             <listitem>
254                 <para>
255                     Le préfixe 'field:' est utilisé pour indiqué un champ sur lequel on veut chercher.
256                     S'il est omis, la recherche se fera sur tous les champs.
257                 </para>
258             </listitem>
259         </itemizedlist>
260         <para>or</para>
261         <para>
262         Construction de la requête via l'<acronym>API</acronym>:
263         </para>
264         <programlisting language="php"><![CDATA[
265 $query = new Zend_Search_Lucene_Search_Query_Boolean();
266 $subquery1 = new Zend_Search_Lucene_Search_Query_MultiTerm();
267 $subquery1->addTerm(new Zend_Search_Lucene_Index_Term('word1'));
268 $subquery1->addTerm(new Zend_Search_Lucene_Index_Term('word2'));
269 $subquery1->addTerm(new Zend_Search_Lucene_Index_Term('word3'));
270 $subquery2 = new Zend_Search_Lucene_Search_Query_MultiTerm();
271 $subquery2->addTerm(new Zend_Search_Lucene_Index_Term('word4', 'author'));
272 $subquery2->addTerm(new Zend_Search_Lucene_Index_Term('word5', 'author'));
273 $term6 = new Zend_Search_Lucene_Index_Term('word6');
274 $subquery3 = new Zend_Search_Lucene_Search_Query_Term($term6);
275 $query->addSubquery($subquery1, true  /* required */);
276 $query->addSubquery($subquery2, null  /* optional */);
277 $query->addSubquery($subquery3, false /* prohibited */);
278 $hits  = $index->find($query);
279 ]]></programlisting>
280         <para>
281             Il est également possible de spécifier des listes de sous-requêtes dans le constructeur
282             d'une requêtes booléene :
283             <programlisting language="php"><![CDATA[
285 $subqueries = array($subquery1, $subquery2, $subquery3);
286 $signs = array(true, null, false);
287 $query = new Zend_Search_Lucene_Search_Query_Boolean($subqueries, $signs);
288 $hits  = $index->find($query);
289 ]]></programlisting>
290         </para>
291         <para>
292             Le tableau <varname>$signs</varname> contient des informations sur le type de chaque sous-requête :
293             <itemizedlist>
294                 <listitem>
295                     <para>
296                         <constant>TRUE</constant> est utilisé pour définir une sous-requête requise.
297                     </para>
298                 </listitem>
299                 <listitem>
300                     <para>
301                         <constant>FALSE</constant> est utilisé pour définir une sous-requête interdite.
302                     </para>
303                 </listitem>
304                 <listitem>
305                     <para>
306                         <constant>NULL</constant> est utilisé pour définir une sous-requête qui n'est
307                         ni requise, ni interdite.
308                     </para>
309                 </listitem>
310             </itemizedlist>
311         </para>
312         <para>
313             Chaque requête qui utilise des opérateurs booléens peut être réécrite en utilisant les notations
314             de signes et construites à l'aide de l'API. Par exemple :
315             <programlisting language="querystring"><![CDATA[
316 word1 AND (word2 AND word3 AND NOT word4) OR word5
317 ]]></programlisting>
318             est équivalent à
319             <programlisting language="querystring"><![CDATA[
320 (+(word1) +(+word2 +word3 -word4)) (word5)
321 ]]></programlisting>
322         </para>
323     </sect2>
324     <sect2 id="zend.search.lucene.queries.wildcard">
325         <title>Requête Joker (wildcard)</title>
326         <para>
327             Les requêtes Joker peuvent être utilisées pour chercher des documents contenant
328             des chaînes de caractères qui correspondent aux modèles (pattern) spécifiés.
329         </para>
330         <para>
331             Le symbole '?' est utilisé comme un joker d'un seul caractère.
332         </para>
333         <para>
334             Le symbole '*' est utilisé comme un joker pour plusieurs caractères.
335         </para>
336         <para>
337             Requête par chaîne de caractères:
338             <programlisting language="querystring"><![CDATA[
339 field1:test*
340 ]]></programlisting>
341         </para>
342         <para>ou</para>
343         <para>
344             Construction de la requête via l'<acronym>API</acronym>:
345             <programlisting language="php"><![CDATA[
346 $pattern = new Zend_Search_Lucene_Index_Term('test*', 'field1');
347 $query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
348 $hits  = $index->find($query);
349 ]]></programlisting>
350         </para>
351         <para>
352             L'argument field est optionnel. <classname>Zend_Search_Lucene</classname> cherche dans
353             tous les champs indexés si aucun champ n'a été spécifié :
354             <programlisting language="php"><![CDATA[
355 $pattern = new Zend_Search_Lucene_Index_Term('test*');
356 $query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
357 $hits  = $index->find($query);
358 ]]></programlisting>
359         </para>
360     </sect2>
361     <sect2 id="zend.search.lucene.queries.fuzzy">
362         <title>Requête floue (fuzzy query)</title>
363         <para>
364             Les requêtes floues peuvent être utilisées pour chercher des documents contenant
365             des chaînes de caractères qui correspondent à des termes similaires au terme cherché.
366         </para>
367         <para>
368             Requête par chaîne de caractères:
369             <programlisting language="querystring"><![CDATA[
370 field1:test~
371 ]]></programlisting>
372             Cette requête va correspondre à des documents contenant 'test', 'text', 'best' ou d'autres mots similaires.
373         </para>
374         <para>ou</para>
375         <para>
376             Construction de la requête via l'<acronym>API</acronym>:
377             <programlisting language="php"><![CDATA[
378 $term = new Zend_Search_Lucene_Index_Term('test', 'field1');
379 $query = new Zend_Search_Lucene_Search_Query_Fuzzy($term);
380 $hits  = $index->find($query);
381 ]]></programlisting>
382         </para>
383         <para>
384             Un indice de similarité (optional similarity) peut être spécifié après le signe "~".
385         </para>
386         <para>
387             Requête par chaîne de caractères:
388             <programlisting language="querystring"><![CDATA[
389 field1:test~0.4
390 ]]></programlisting>
391         </para>
392         <para>ou</para>
393         <para>
394             Construction de la requête via l'<acronym>API</acronym>:
395             <programlisting language="php"><![CDATA[
396 $term = new Zend_Search_Lucene_Index_Term('test', 'field1');
397 $query = new Zend_Search_Lucene_Search_Query_Fuzzy($term, 0.4);
398 $hits  = $index->find($query);
399 ]]></programlisting>
400         </para>
401         <para>
402             L'argument field est optionnel. <classname>Zend_Search_Lucene</classname> cherche dans
403             tous les champs indexés si aucun champ n'a été spécifié :
404             <programlisting language="php"><![CDATA[
405 $term = new Zend_Search_Lucene_Index_Term('test');
406 $query = new Zend_Search_Lucene_Search_Query_Fuzzy($term);
407 $hits  = $index->find($query);
408 ]]></programlisting>
409         </para>
410     </sect2>
411     <sect2 id="zend.search.lucene.queries.phrase-query">
412         <title>Requête de phrase</title>
413         <para>
414             Les requêtes de phrase peuvent être utilisées pour chercher une phrase dans des documents.
415         </para>
416         <para>
417             Les requêtes de phrase sont très flexible et permettent à l'utilisateur ou au développeur de chercher
418             des phrases exactes aussi bien que des phrases 'imprécises'.
419         </para>
420         <para>
421             Les phrases peuvent aussi contenir des trous ou des termes aux mêmes places; elles peuvent
422             être générées par l'analyseur dans différents buts. Par exemple, un terme peut être dupliqué
423             pour augmenter son poids, ou plusieurs synonymes peuvent être placés sur une seule et unique position.
424         </para>
425         <programlisting language="php"><![CDATA[
426 $query1 = new Zend_Search_Lucene_Search_Query_Phrase();
427 // Ajoute 'word1' à la position relative 0.
428 $query1->addTerm(new Zend_Search_Lucene_Index_Term('word1'));
429 // Ajoute 'word2' à la position relative 1.
430 $query1->addTerm(new Zend_Search_Lucene_Index_Term('word2'));
431 // Ajoute 'word3' à la position relative 3.
432 $query1->addTerm(new Zend_Search_Lucene_Index_Term('word3'), 3);
434 $query2 = new Zend_Search_Lucene_Search_Query_Phrase(
435                 array('word1', 'word2', 'word3'), array(0,1,3));
437 // Requête sans trou.
438 $query3 = new Zend_Search_Lucene_Search_Query_Phrase(
439                 array('word1', 'word2', 'word3'));
441 $query4 = new Zend_Search_Lucene_Search_Query_Phrase(
442                 array('word1', 'word2'), array(0,1), 'annotation');
443 ]]></programlisting>
444         <para>
445             Une requête de phrase peut être construite en une seule étape à l'aide du constructeur ou
446             étape par étape avec des appels à la méthode <methodname>Zend_Search_Lucene_Search_Query_Phrase::addTerm()</methodname>.
447         </para>
448         <para>
449             Le constructeur de la classe <classname>Zend_Search_Lucene_Search_Query_Phrase</classname> prends trois arguments optionnels :
450         </para>
451         <programlisting language="php"><![CDATA[
452 Zend_Search_Lucene_Search_Query_Phrase(
453     [array $terms[, array $offsets[, string $field]]]
455 ]]></programlisting>
456         <para>
457             Le paramètre <varname>$terms</varname> est un tableau de chaînes de caractères qui
458             contient une collection de termes pour une phrase. S'il est omis ou égal à <constant>NULL</constant>,
459             une requête vide sera construite.
460         </para>
461         <para>
462             Le paramètre <varname>$offsets</varname> est un tableau d'entiers qui contient les positions
463             des termes dans la phrase. S'il est omis ou égale à <constant>NULL</constant>, les positions
464             des termes seront implicitement séquentielles sans trou.
465         </para>
466         <para>
467             Le paramètre <varname>$field</varname> est un chaîne de caractères qui indique le
468             champ dans lequel chercher. S'il est omis ou égal à <constant>NULL</constant>, la
469             recherche se fera dans le champ par défaut.
470         </para>
471         <para>
472             Ainsi :
473         </para>
474         <programlisting language="php"><![CDATA[
475 $query =
476     new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'framework'));
477 ]]></programlisting>
478         <para>
479             va chercher la phrase 'zend framework' dans tous les champs.
480         </para>
481         <programlisting language="php"><![CDATA[
482 $query = new Zend_Search_Lucene_Search_Query_Phrase(
483                  array('zend', 'download'), array(0, 2)
484              );
485 ]]></programlisting>
486         <para>
487             va chercher la phrase 'zend ????? download' et correspondra à 'zend platform download', 'zend studio
488             download', 'zend core download', 'zend framework download', etc.
489         </para>
490         <programlisting language="php"><![CDATA[
491 $query = new Zend_Search_Lucene_Search_Query_Phrase(
492                  array('zend', 'framework'), null, 'title'
493              );
494 ]]></programlisting>
495         <para>
496             va chercher la phrase 'zend framework' dans le champ 'title'.
497         </para>
498         <para>
499             La méthode <methodname>Zend_Search_Lucene_Search_Query_Phrase::addTerm()</methodname> prends deux
500             arguments, un <classname>Zend_Search_Lucene_Index_Term</classname> requis et une position optionnelle :
501         </para>
502         <programlisting language="php"><![CDATA[
503 Zend_Search_Lucene_Search_Query_Phrase::addTerm(
504     Zend_Search_Lucene_Index_Term $term[, integer $position]
506 ]]></programlisting>
507         <para>
508             Le paramètre <varname>$term</varname> décrit le prochain terme dans la phrase. Il doit
509             indiquer le même champ que les termes précédents, sinon une exception sera levée.
510         </para>
511         <para>
512             Le paramètre <varname>$position</varname> indique la position du terme dans la phrase.
513         </para>
514         <para>
515             Ainsi :
516         </para>
517         <programlisting language="php"><![CDATA[
518 $query = new Zend_Search_Lucene_Search_Query_Phrase();
519 $query->addTerm(new Zend_Search_Lucene_Index_Term('zend'));
520 $query->addTerm(new Zend_Search_Lucene_Index_Term('framework'));
521 ]]></programlisting>
522         <para>
523             va chercher la phrase 'zend framework'.
524          </para>
525         <programlisting language="php"><![CDATA[
526 $query = new Zend_Search_Lucene_Search_Query_Phrase();
527 $query->addTerm(new Zend_Search_Lucene_Index_Term('zend'), 0);
528 $query->addTerm(new Zend_Search_Lucene_Index_Term('framework'), 2);
529 ]]></programlisting>
530         <para>
531             va chercher la phrase 'zend ????? download' et correspondra à 'zend platform download', 'zend studio
532             download', 'zend core download', 'zend framework download', etc.
533         </para>
534         <programlisting language="php"><![CDATA[
535 $query = new Zend_Search_Lucene_Search_Query_Phrase();
536 $query->addTerm(new Zend_Search_Lucene_Index_Term('zend', 'title'));
537 $query->addTerm(new Zend_Search_Lucene_Index_Term('framework', 'title'));
538 ]]></programlisting>
539         <para>
540             va chercher la phrase 'zend framework' dans le champ 'title'.
541         </para>
542         <para>
543             Le 'slop factor' établit le nombre d'autres mots autorisés entre les mots spécifiés dans la requête de phrase.
544             S'il est défini à zéro, la requête correspondante sera une recherche d'une phrase exacte. Pour des valeurs
545             supérieures à zéro, cela fonctionne comme les opérateurs WITHIN ou NEAR.
546         </para>
547         <para>
548             Le 'slop factor' est en fait une distance d'édition, où les éditions consistent à déplacer les termes dans
549             la phrase recherchée. Par exemple, inverser l'ordre de deux mots requiert deux déplacements (le premier
550             déplacement positionne les mots l'un sur l'autre), donc pour permettre le réarrangement de phrase, le
551             'slop factor' doit être d'au moins deux.
552         </para>
553         <para>
554             Les correspondances les plus exactes possèdent un meilleur score que celles ayant eu recours au 'slop factor';
555             ainsi les résultats de recherche sont classés par exactitude. Le 'slop factor' est à zéro par défaut, requérant des
556             correspondances exactes.
557         </para>
558         <para>
559             Le 'slop factor' peut être assigné après la création de la requête :
560         </para>
561         <programlisting language="php"><![CDATA[
562 // Requêtes sans trou.
563 $query =
564     new Zend_Search_Lucene_Search_Query_Phrase(array('word1', 'word2'));
565 // Search for 'word1 word2', 'word1 ... word2'
566 $query->setSlop(1);
567 $hits1 = $index->find($query);
568 // Recherche pour 'word1 word2', 'word1 ... word2',
569 // 'word1 ... ... word2', 'word2 word1'
570 $query->setSlop(2);
571 $hits2 = $index->find($query);
572 ]]></programlisting>
573     </sect2>
574     <sect2 id="zend.search.lucene.queries.range">
575         <title>Requête d'intervalle</title>
576         <para>
577             Les <link linkend="zend.search.lucene.query-language.range">requêtes d'intervalle</link> sont dédiées à la recherche de termes dans un intervalle spécifié.
578         </para>
579         <para>
580             Requête par chaîne de caractères:
581             <programlisting language="querystring"><![CDATA[
582 mod_date:[20020101 TO 20030101]
583 title:{Aida TO Carmen}
584 ]]></programlisting>
585         </para>
586         <para>ou</para>
587         <para>
588             Construction de la requête via l'<acronym>API</acronym>:
589             <programlisting language="php"><![CDATA[
590 $from = new Zend_Search_Lucene_Index_Term('20020101', 'mod_date');
591 $to   = new Zend_Search_Lucene_Index_Term('20030101', 'mod_date');
592 $query = new Zend_Search_Lucene_Search_Query_Range(
593                  $from, $to, true // inclusive
594              );
595 $hits  = $index->find($query);
596 ]]></programlisting>
597         </para>
598         <para>
599             L'argument field est optionnel. <classname>Zend_Search_Lucene</classname> cherche dans
600             tous les champs indexés si aucun champ n'a été spécifié :
601             <programlisting language="php"><![CDATA[
602 $from = new Zend_Search_Lucene_Index_Term('Aida');
603 $to   = new Zend_Search_Lucene_Index_Term('Carmen');
604 $query = new Zend_Search_Lucene_Search_Query_Range(
605                  $from, $to, false // non-inclusive
606              );
607 $hits  = $index->find($query);
608 ]]></programlisting>
609         </para>
610         <para>
611             L'une ou l'autre (mais pas les deux) des bornes peut être définie à <constant>NULL</constant>.
612             Dans ce cas, <classname>Zend_Search_Lucene</classname> cherche depuis le début ou jusqu'à la
613             fin du dictionnaire pour le(s) champs spécifié(s) :
614             <programlisting language="php"><![CDATA[
615 // recherche pour ['20020101' TO ...]
616 $from = new Zend_Search_Lucene_Index_Term('20020101', 'mod_date');
617 $query = new Zend_Search_Lucene_Search_Query_Range(
618                  $from, null, true // inclusive
619              );
620 $hits  = $index->find($query);
621 ]]></programlisting>
622         </para>
623     </sect2>
624 </sect1>
625 <!--
626 vim:se ts=4 sw=4 et: