|
|
Zend_Search_Lucene arbeitet intern mit dem UTF-8 Zeichensatz.
Indexdateien speichern Unicode Daten in Java's "modifiziertem UTF-8 Codierung". Der Kern
von Zend_Search_Lucene unterstützt diesen Zeichensatz mit einer
Ausnahme komplett.
[1]
Zend_Search_Lucene
Die Codierung der aktuellen Eingabedaten dann über die API von
Zend_Search_Lucene spezifiziert werden. Daten werden automatisch
in die UTF-8 Codierung konvertiert.
Trotzdem verwendet der standardmäßige Textanalysator (welche auch im Anfrageparser arbeitet) ctype_alpha() für das analysieren von Text und Anfragen.
ctype_alpha() ist nicht UTf-8 kompatibel, weswegen der Analysator Text zuerst in die 'ASCII//TRANSLIT' Codierung konvertiert bevor er indiziert. Die selbe Bearbeitung wird transparent wärend des Parsens der Abfrage durchgeführt [2]
Hinweis:
Der Standardanalysator behandelt Zahlen nicht als Teile von Ausdrücken. Wenn Wörter nicht durch Zahlen unterbrochen werden sollen kann der entsprechende 'Num' Analysator verwendet werden.
Zend_Search_Lucene enthält auch ein Set von UTF-8 kompatiblen
Analysatoren: Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8,
Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num,
Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive,
Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive.
Jeder dieser Analysatoren kenn mit Code wie dem folgenden eingeschaltet werden:
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
Die UTF-8 kompatiblen Analysatoren wurden in Zend Framework 1.5 verbessert. Frühere Versionen der Analysatoren nahmen an das alle nicht-Ascii Zeichen Buchstaben sind. Die neuen Analysatoren haben ein genaueres Verhalten.
Deswegen kann es notwendig sein den Index neu zu erstellen um Daten und Suchanfragen auf die gleiche Art und Weise in Ausdrücke zerlegt zu haben, weil sonst andererseits die Suchmaschine falsche Ergebnissets zurückgeben könnte.
Alle diese Analysatoren benötigen die PCRE (Perl-kompatible reguläre Ausdrücke) Bibliothek kompiliert mit eingeschalteter UTF-8 Unterstützung. PCRE UTF-8 Unterstützung ist für die PCRE Bibliotheks Quellcodes die mit den PHP Quellcodes gekoppelt sind, eingeschaltet, aber wenn eine andere Bibliothek als die vom PHP Quellcode verwendet wird, ist der Status der UTF-8 Unterstützung abhängig vom eigenen Betriebsystem.
Der folgende Code kann verwendet werden um zu prüfen ob PCRE UTF-8 Unterstützung eingeschaltet ist:
if (@preg_match('/\pL/u', 'a') == 1) {
echo "PCRE Unicode Unterstützung ist eingeschaltet.\n";
} else {
echo "PCRE Unicode Unterstützung ist ausgeschaltet.\n";
}
Groß-/Kleinschreibungs-unabhängige Versionen von UTF-8 kompatiblen Analysatoren erfordern das die » mbstring Erweiterung aktiviert ist.
Wenn man die mbstring Erweiterung nicht einschalten will, und trotzdem Groß-/Kleinschreibungs unabhängige Suchen benötigt, kann die folgende Vorgehensweise verwendet werden: Quelldaten vor der Indizierung und Abfragestring for der Suche normalisieren indem diese zur Kleinschreibung konvertiert werden:
// Indizierung
setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
...
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
...
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
strtolower($contents)));
// Titel Feld für das Durchsuchen (indiziert, nicht gespeichert)
$doc->addField(Zend_Search_Lucene_Field::UnStored('title',
strtolower($title)));
// Titel Feld für das Empfangen (nicht indiziert, gespeichert)
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('_title', $title));
// Suche
setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
...
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
...
$hits = $index->find(strtolower($query));
|
|
Copyright © 2005-2011 Zend Technologies Inc (compiled by mikaelkael with ZFDocumentor - SVN 22695).

