19.6. Кодировки

19.6.1. Поддержка UTF-8 и однобайтных наборов символов

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.