14.5. Zeichensatz.

14.5.1. Unterstützung für UTF-8 und Zeichensätze mit einzelnen Bytes.

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.