Zend_Search_Lucene foi projetado para trabalhar com conjuntos de caracteres UTF-8. Arquivos de índice armazenam dados unicode no formato de codificação "UTF-8 modificado" usado pelo Java. O núcleo do Zend_Search_Lucene suporta-os plenamente, com uma exceção: [6]
Em todo caso, tanto os analizadores de texto, quanto os interpretadores e processadores de consultas, utilizam a função ctype_alpha() para tokenizar os textos e as consultas. A função ctype_alpha() não suporta UTF-8 e sua substituição deve ser considerada em um futuro próximo.
Por enquanto, recomendamos a conversão dos dados para a representação ASCII. [7] (isso vale tanto para consultas, quanto para armazenagem de documentos fonte):
<?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); ?>
[6] Zend_Search_Lucene suporta somente os caracteres do Plano Multilingual Básico (BMP) (de 0x0000 a 0xFFFF), não suportando os caracteres suplementares (caracteres acima de 0xFFFF)
O Java 2 representa estes caracteres como um par de valores do tipo char (16 bits), o primeiro vem da faixa superior (0xD800-0xDBFF), o segundo, da faixa inferior (0xDC00-0xDFFF). Logo eles são codificados como caracteres usuais UTF-8 em seis bytes. A representação padrão UTF-8 utiliza quatro bytes para caracteres suplementares.
[7] Se os dados estiverem em formato UTF-8 ou, obrigatoriamente, contiverem caracteres inexistentes em ASCII.