| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.search.lucene.charset">
- <title>Jeu de caractères</title>
- <sect2 id="zend.search.lucene.charset.description">
- <title>Support UTF-8 et caractères sur un octet</title>
- <para>
- <classname>Zend_Search_Lucene</classname> utilise l'UTF-8 en interne. Les fichiers
- d'index stockent des données Unicode dans le "format UTF-8 modifié" de Java.
- <classname>Zend_Search_Lucene</classname> supporte totalement ce format, à une exception
- près. <footnote>
- <para>
- Zend_Search_Lucene supporte seulement les caractères Basic Multilingual
- Plane (BMP) (de 0x0000 à 0xFFFF) et ne supporte pas les "caractères
- supplémentaires" (caractères dont les codes sont supérieurs à 0xFFFF).
- </para>
- <para>
- Java 2 représente ces caractères comme une paire de char (16-bit), le
- premier depuis l'échelle haute (0xD800-0xDBFF), le second pour l'échelle basse
- (0xDC00-0xDFFF). Ils sont alors encodés comme des caractères UTF-8 standards sur
- six octets. La représentation UTF-8 standard utilise elle 4 octets pour les
- caractères supplémentaires.
- </para>
- </footnote>
- </para>
- <para>
- L'encodage des caractères d'entrée peut être spécifié grâce à l'API de
- <classname>Zend_Search_Lucene</classname>. Les données seront converties automatiquement
- en UTF-8.
- </para>
- </sect2>
- <sect2 id="zend.search.lucene.charset.default_analyzer">
- <title>Analyseur de texte par défaut</title>
- <para>
- Cependant, l'analyseur de texte par défaut (aussi utilisé par l'analyseur de
- requête) utilise <methodname>ctype_alpha()</methodname>.
- </para>
- <para>
- <methodname>ctype_alpha()</methodname> n'est pas compatible UTF-8, donc l'analyseur convertit
- le texte vers "ASCII//TRANSLIT" avant l'indexation. Le même processus est utilisé de
- manière transparente lors du requêtage. <footnote>
- <para>
- La conversion vers 'ASCII//TRANSLIT' peut dépendre de la locale courante
- ou de l'OS.
- </para>
- </footnote>
- </para>
- <note>
- <title></title>
- <para>
- L'analyseur par défaut isole les chiffres. Utilisez le parseur "Num" si vous
- voulez que les chiffres soient considérés comme des mots.
- </para>
- </note>
- </sect2>
- <sect2 id="zend.search.lucene.charset.utf_analyzer">
- <title>Analyseurs de texte compatibles UTF-8</title>
- <para>
- <classname>Zend_Search_Lucene</classname> contient aussi des analyseurs
- compatibles UTF-8 :
- <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8</classname>,
- <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num</classname>,
- <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive</classname>,
- <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive</classname>.
- </para>
- <para>
- N'importe quel analyseur peut être activé avec un code comme celui-ci:
- <programlisting language="php"><![CDATA[
- Zend_Search_Lucene_Analysis_Analyzer::setDefault(
- new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
- ]]></programlisting>
- </para>
- <warning>
- <title></title>
- <para>
- Les analyseurs UTF-8 ont été améliorés dans Zend Framework 1.5. Les anciennes
- versions considéraient les caractères non-ASCII comme des lettres. Les nouveaux
- analyseurs sont quant à eux plus précis sur ce point.
- </para>
- <para>
- Ceci pourrait vous obliger à reconstruire votre index afin que vos données et
- vos requêtes de recherche soient au même format. Des résultats faux peuvent
- apparaître sinon.
- </para>
- </warning>
- <para>
- Tous ces analyseurs nécessitent que la libraire PCRE (Perl-compatible regular
- expressions) soit compilée avec le support d'UTF-8. Ce support d'UTF-8 pour PCRE est
- activé par défaut dans les sources des libraires PCRE livrées avec <acronym>PHP</acronym>, mais si vous
- avez utilisé des librairies partagées pour la compilation de <acronym>PHP</acronym>, alors le support
- d'UTF-8 peut dépendre de l'OS.
- </para>
- <para>
- Utilisez ce code pour vérifier si le support d'UTF-8 est assuré pour PCRE :
- <programlisting language="php"><![CDATA[
- if (@preg_match('/\pL/u', 'a') == 1) {
- echo "support UTF-8 pour PCRE activé.\n";
- } else {
- echo "support UTF-8 pour PCRE désactivé.\n";
- }
- ]]></programlisting></para>
- <para>
- Les analyseurs UTF-8 insensibles à la casse ont aussi besoin de l'extension <ulink
- url="http://www.php.net/manual/en/ref.mbstring.php">mbstring</ulink> pour être
- activés.
- </para>
- <para>
- Si vous voulez les analyseurs UTF-8 insensibles à la casse, mais que vous n'avez
- pas mbstring, normalisez alors vos données avant de les indexer ainsi que vos requêtes
- avant vos recherches, ceci en les tranformant en casse minuscule : <programlisting
- role="php"><![CDATA[
- // Indexation
- setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
- ...
- Zend_Search_Lucene_Analysis_Analyzer::setDefault(
- new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
- ...
- $doc = new Zend_Search_Lucene_Document();
- $doc->addField(Zend_Search_Lucene_Field::UnStored(
- 'contents', strtolower($contents))
- );
- // champ titre (indexed, unstored)
- $doc->addField(Zend_Search_Lucene_Field::UnStored(
- 'title', strtolower($title))
- );
- // champ titre (unindexed, stored)
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed('_title', $title));
- ]]></programlisting> <programlisting language="php"><![CDATA[
- // Recherche
- setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
- ...
- Zend_Search_Lucene_Analysis_Analyzer::setDefault(
- new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
- ...
- $hits = $index->find(strtolower($query));
- ]]></programlisting></para>
- </sect2>
- </sect1>
|