[ZF-10089] Zend_Log
[zend.git] / documentation / manual / fr / module_specs / Zend_Search_Lucene-Charset.xml
blob84d3abe5d40397d74b2b0ef1115e0dc7bbce2b4d
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 21829 -->
3 <!-- Reviewed: no -->
4 <sect1 id="zend.search.lucene.charset">
5     <title>Jeu de caractères</title>
7     <sect2 id="zend.search.lucene.charset.description">
8         <title>Support UTF-8 et caractères sur un octet</title>
10         <para>
11             <classname>Zend_Search_Lucene</classname> utilise l'UTF-8 en interne. Les fichiers
12             d'index stockent des données Unicode dans le "format UTF-8 modifié" de Java.
13             <classname>Zend_Search_Lucene</classname> supporte totalement ce format, à une exception
14             près. <footnote>
15                 <para>
16                     Zend_Search_Lucene supporte seulement les caractères Basic Multilingual
17                     Plane (BMP) (de 0x0000 à 0xFFFF) et ne supporte pas les "caractères
18                     supplémentaires" (caractères dont les codes sont supérieurs à 0xFFFF).
19                 </para>
21                 <para>
22                     Java 2 représente ces caractères comme une paire de char (16-bit), le
23                     premier depuis l'échelle haute (0xD800-0xDBFF), le second pour l'échelle basse
24                     (0xDC00-0xDFFF). Ils sont alors encodés comme des caractères UTF-8 standards sur
25                     six octets. La représentation UTF-8 standard utilise elle 4 octets pour les
26                     caractères supplémentaires.
27                 </para>
28                 </footnote>
29             </para>
31         <para>
32             L'encodage des caractères d'entrée peut être spécifié grâce à l'API de
33             <classname>Zend_Search_Lucene</classname>. Les données seront converties automatiquement
34             en UTF-8.
35         </para>
36     </sect2>
38     <sect2 id="zend.search.lucene.charset.default_analyzer">
39         <title>Analyseur de texte par défaut</title>
41         <para>
42             Cependant, l'analyseur de texte par défaut (aussi utilisé par l'analyseur de
43             requête) utilise <methodname>ctype_alpha()</methodname>.
44         </para>
46         <para>
47             <methodname>ctype_alpha()</methodname> n'est pas compatible UTF-8, donc l'analyseur convertit
48             le texte vers "ASCII//TRANSLIT" avant l'indexation. Le même processus est utilisé de
49             manière transparente lors du requêtage. <footnote>
50                 <para>
51                     La conversion vers 'ASCII//TRANSLIT' peut dépendre de la locale courante
52                     ou de l'OS.
53                 </para>
54                 </footnote>
55             </para>
57         <note>
58             <title></title>
60             <para>
61                 L'analyseur par défaut isole les chiffres. Utilisez le parseur "Num" si vous
62                 voulez que les chiffres soient considérés comme des mots.
63             </para>
64         </note>
65     </sect2>
67     <sect2 id="zend.search.lucene.charset.utf_analyzer">
68         <title>Analyseurs de texte compatibles UTF-8</title>
70         <para>
71             <classname>Zend_Search_Lucene</classname> contient aussi des analyseurs
72             compatibles UTF-8 :
73             <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8</classname>,
74             <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num</classname>,
75             <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive</classname>,
76             <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive</classname>.
77         </para>
79         <para>
80             N'importe quel analyseur peut être activé avec un code comme celui-ci:
81             <programlisting language="php"><![CDATA[
82 Zend_Search_Lucene_Analysis_Analyzer::setDefault(
83     new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
84 ]]></programlisting>
85             </para>
87         <warning>
88             <title></title>
90             <para>
91                 Les analyseurs UTF-8 ont été améliorés dans Zend Framework 1.5. Les anciennes
92                 versions considéraient les caractères non-ASCII comme des lettres. Les nouveaux
93                 analyseurs sont quant à eux plus précis sur ce point.
94             </para>
96             <para>
97                 Ceci pourrait vous obliger à reconstruire votre index afin que vos données et
98                 vos requêtes de recherche soient au même format. Des résultats faux peuvent
99                 apparaître sinon.
100             </para>
101         </warning>
103         <para>
104             Tous ces analyseurs nécessitent que la libraire PCRE (Perl-compatible regular
105             expressions) soit compilée avec le support d'UTF-8. Ce support d'UTF-8 pour PCRE est
106             activé par défaut dans les sources des libraires PCRE livrées avec <acronym>PHP</acronym>, mais si vous
107             avez utilisé des librairies partagées pour la compilation de <acronym>PHP</acronym>, alors le support
108             d'UTF-8 peut dépendre de l'OS.
109         </para>
111         <para>
112             Utilisez ce code pour vérifier si le support d'UTF-8 est assuré pour PCRE :
113             <programlisting language="php"><![CDATA[
114 if (@preg_match('/\pL/u', 'a') == 1) {
115     echo "support UTF-8 pour PCRE activé.\n";
116 } else {
117     echo "support UTF-8 pour PCRE désactivé.\n";
119 ]]></programlisting></para>
121         <para>
122             Les analyseurs UTF-8 insensibles à la casse ont aussi besoin de l'extension <ulink
123             url="http://www.php.net/manual/en/ref.mbstring.php">mbstring</ulink> pour être
124             activés.
125         </para>
127         <para>
128             Si vous voulez les analyseurs UTF-8 insensibles à la casse, mais que vous n'avez
129             pas mbstring, normalisez alors vos données avant de les indexer ainsi que vos requêtes
130             avant vos recherches, ceci en les tranformant en casse minuscule : <programlisting
131             role="php"><![CDATA[
132 // Indexation
133 setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
137 Zend_Search_Lucene_Analysis_Analyzer::setDefault(
138     new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
142 $doc = new Zend_Search_Lucene_Document();
144 $doc->addField(Zend_Search_Lucene_Field::UnStored(
145                     'contents', strtolower($contents))
146               );
148 // champ titre (indexed, unstored)
149 $doc->addField(Zend_Search_Lucene_Field::UnStored(
150                     'title', strtolower($title))
151               );
153 // champ titre (unindexed, stored)
154 $doc->addField(Zend_Search_Lucene_Field::UnIndexed('_title', $title));
155 ]]></programlisting> <programlisting language="php"><![CDATA[
156 // Recherche
157 setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
161 Zend_Search_Lucene_Analysis_Analyzer::setDefault(
162     new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
166 $hits = $index->find(strtolower($query));
167 ]]></programlisting></para>
168         </sect2>
169     </sect1>