Zend_Search_Lucene est créée pour fonctionnet avec UTF-8. Les fichier d'index stockent des données unicode en JAVA "modified UTF-8 encoding". Le coeur de Zend_Search_Lucene le supporte complètement, à une exception près: [7]
Cependant, les analyseurs de texte, et le parseur de requête utilisent ctype_alpha() pour tokeniser le texte et les requêtes. ctype_alpha() ne supporte pas l'UTF-8 et devra être remplacé par quelque chose d'autre dans un future proche.
Avant d'être fortement encouragé à convertir vos données en ASCII [8] (pour stocker les documents source, et pour effectuer des requêtes) :
<?php $doc = new Zend_Search_Lucene_Document(); ... $docText = iconv('ISO-8859-1', 'ASCII//TRANSLIT', $docText); $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $docText)); ... $query = iconv('', 'ASCII//TRANSLIT', $query); $hits = $index->find($query); ?>
[7] Zend_Search_Lucene ne supporte uniquement que les caractères BMP (Basic Multilingual Plane) (de 0x0000 à 0xFFFF) et ne supporte pas les "caractères supplémentaires" (les caractères dont le code est supérieur à 0xFFFF).
Java 2 représente ces caractères comme une paire de valeurs de type char (16-bit), en premier la gamme des hauts-substituts (0xD800-0xDBFF), en deuxième la game des bas-substituts (0xDC00-0xDFFF). Ensuite tout est encodé comme des caractères UTF-8 habituels dans six octets. La représentation standard d'UTF-8 utilise quatre octets pour les caractères supplémentaires.
[8] Si les données contiennent des caractères non-ascii ou arrivent en UTF-8