Conjuntos de Caracteres
Suporte aos conjuntos de caracteres UTF-8 e byte-simples.
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:
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.
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.
Se os dados estiverem em formato UTF-8 ou, obrigatoriamente,
contiverem caracteres inexistentes em ASCII.
(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);
?>