Zend_Search_Lucene рассчитан на работу с текстами в кодировке UTF-8. Файлы индекса хранят данные unicode в кодировке Modified UTF-8 от Java. Ядро Zend_Search_Lucene полностью поддерживает его за одним исключением. [9]
Тем не менее, анализатор текста и парсер запросов используют
ctype_alpha()
для разбиения текста и запросов на лексемы.
ctype_alpha()
не поддерживает UTF-8
и будет заменен в ближайшем будущем.
До этого мы настоятельно рекомендуем конвертировать данные в представление ASCII [10] (как для хранения исходных документов, так и для запросов):
<?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); ?>
[9] Zend_Search_Lucene поддерживает только символы Basic Multilingual Plane (от 0x0000 до 0xFFFF) и не поддерживает дополнительные символы (символы, чьи коды больше 0xFFFF).
Java 2 представляет эти символыв виде пары значений символьного типа (16 бит), перое из диапазона 0xD800-0xDBFF, второе из диапазона 0xDC00-0xDFFF. Тогда они кодируются как обычные символы UTF-8 в шести байтах. Стандартное представление UTF-8 использует четыре байта для дополнительных символов.
[10] Если данные могут содержать не-ascii символы или быть представлены в UTF-8.