Programmer's Reference Guide
| Abfrage Erzeugungs API |
Zeichensätze
Unterstützung für UTF-8 und Einzel-Byte Zeichensätze
Zend_Search_Lucene arbeitet intern mit dem UTF-8 Zeichensatz. Index Dateien speichern Unicode Daten in Java's "modifiziertem UTF-8 Codierung". Der Kern von Zend_Search_Lucene unterstützt Ihn komplett aber mit einer Ausnahme. [1]
Die Codierung der aktuellen Eingabedaten dann über die API von Zend_Search_Lucene spezifiziert werden. Daten werden automatisch in die UTF-8 Codierung konvertiert.
Standard Textanalysator
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. Der selbe Prozess wird wärend des Parsens der Anfrage durchgeführt, er ist also komplett transparent. [2]
UTF-8 kompatibler Textanalysator
Zend_Search_Lucene enthält auch einen limitiert funktionsfähigen UTF-8 Analysator. Er kann mit dem folgenden Code eingeschaltet werden:
<?php
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
Er bezeichnet Daten für das Indizieren im UTF-8 Modus und hat keine Problem mit irgendwelchen UTF-8 kompatiblen Zeichen.
Er hat zwei Einschränkungen:
-
behandelt alle nicht-ASCII Zeichen als Buchstaben (das stimmt nicht immer);
-
er unterscheidet zwischen Groß- und Kleinschreibung;
Wegen dieser Einschränkungen ist er nicht als Standard gesetzt, kann aber von Zeit zu Zeit hilfreich sein.
Unabhängigkeit von Groß- und Kleinschreibung kann emuliert werden mit einer strtolower()
Konvertierung:
<?php
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));
Die selbe Konvertierung kann mit einem Abfrage String durchgeführt werden:
<?php
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));
| Abfrage Erzeugungs API |
