Zend_Search_Lucene wurde entwicklet, um mit dem UTF-8 Zeichensatz zu arbeiten. Die Indexdateien speichern Unicode Daten in Javas "modified UTF-8 encoding". Der Kern von Zend_Search_Lucene unterstützt dies komplett mit einer Ausnahme. [7]
Dennoch verwenden die Textanalysatoren und der Query Parser ctype_alpha(), um Texte und Abfragen in Tokens aufzuteilen. ctype_alpha() unterstützt UTF-8 nicht und muss in naher Zukunft durch etwas anderes ersetzt werden.
Vorher empfehlen wir sehr, deine Daten in eine ASCII Darstellung [8] umzuwandeln (sowohl für das Speichern der Quelldokumente als auch für die Abfragen):
<?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 unterstützt nur "Basic Multilingual Plane" (BMP) Zeichen (von 0x0000 bis 0xFFFF) und unterstützt keine "zusätzlichen Zeichen" (Zeichen, dessen Kodierungspunkt größer als 0xFFFF sind).
Java 2 stellt diese Zeichen als ein Paar von Zeichenwerten (16-bit) dar, das erste aus dem "high-surrogates" Bereich (0xD800-0xDBFF), das zweite aus dem "ow-surrogates" Bereich (0xDC00-0xDFFF). Dann werden sie als normale UTF-8 in sechs Bytes kodiert. Die Standard UTF-8 Darstellung verwendet vier Bytes für zusätzliche Zeichen.
[8] Wenn Daten Nicht-ASCII Zeichen enthalten sein könnten oder als UTF-8 vorliegen.