| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.search.lucene.charset">
- <title>Zeichensätze</title>
- <sect2 id="zend.search.lucene.charset.description">
- <title>Unterstützung für UTF-8 und Einzel-Byte Zeichensätze</title>
- <para>
- <classname>Zend_Search_Lucene</classname> arbeitet intern mit dem UTF-8 Zeichensatz.
- Indexdateien speichern Unicode Daten in Java's "modifiziertem UTF-8 Codierung". Der Kern
- von <classname>Zend_Search_Lucene</classname> unterstützt diesen Zeichensatz mit einer
- Ausnahme komplett.
- <footnote>
- <para>
- <classname>Zend_Search_Lucene</classname> unterstützt nur Basic Multilingual
- Plane (BMP) Zeichen (von 0x0000 bis 0xFFFF) und unterstützt keine "zusätzlichen
- Zeichen" (Zeichen deren Codepunkte größer als 0xFFFF sind).
- </para>
- <para>
- Java 2 zeigt diese Werte als Paare von Zeichen (16-bit) Werten an, der erste vom
- High-Surrogate Bereich (0xD800-0xDBFF), den zweiten vom Low-Surrogate Bereich
- (0xDC00-0xDFFF). Dann werden Sie als normale UTF-8 Zeichen mit sechs Bytes
- kodiert. Die Standard UTF-8 Repräsentation verwendet vier Bytes für zusätzliche
- Zeichen.
- </para>
- </footnote>
- </para>
- <para>
- Die Codierung der aktuellen Eingabedaten dann über die <acronym>API</acronym> von
- <classname>Zend_Search_Lucene</classname> spezifiziert werden. Daten werden automatisch
- in die UTF-8 Codierung konvertiert.
- </para>
- </sect2>
- <sect2 id="zend.search.lucene.charset.default_analyzer">
- <title>Standard Textanalysator</title>
- <para>
- Trotzdem verwendet der standardmäßige Textanalysator (welche auch im Anfrageparser
- arbeitet) ctype_alpha() für das analysieren von Text und Anfragen.
- </para>
- <para>
- 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ährend des Parsens der Abfrage durchgeführt
- <footnote>
- <para>
- Konvertierungen in 'ASCII//TRANSLIT' sind abhängig von dem aktuellen
- Gebietsschema und OS.
- </para>
- </footnote>
- </para>
- <note>
- <title/>
- <para>
- 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.
- </para>
- </note>
- </sect2>
- <sect2 id="zend.search.lucene.charset.utf_analyzer">
- <title>UTF-8 kompatibler Textanalysator</title>
- <para>
- <classname>Zend_Search_Lucene</classname> enthält auch ein Set von UTF-8 kompatiblen
- Analysatoren: <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8</classname>,
- <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num</classname>,
- <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive</classname>,
- <classname>Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive</classname>.
- </para>
- <para>
- Jeder dieser Analysatoren kenn mit Code wie dem folgenden eingeschaltet werden:
- </para>
- <programlisting language="php"><![CDATA[
- Zend_Search_Lucene_Analysis_Analyzer::setDefault(
- new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
- ]]></programlisting>
- <warning>
- <title/>
- <para>
- 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.
- </para>
- <para>
- 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.
- </para>
- </warning>
- <para>
- 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 <acronym>PHP</acronym> Quellcodes
- gekoppelt sind, eingeschaltet, aber wenn eine andere Bibliothek als die vom
- <acronym>PHP</acronym> Quellcode verwendet wird, ist der Status der UTF-8 Unterstützung
- abhängig vom eigenen Betriebsystem.
- </para>
- <para>
- Der folgende Code kann verwendet werden um zu prüfen ob PCRE UTF-8 Unterstützung
- eingeschaltet ist:
- </para>
- <programlisting language="php"><![CDATA[
- if (@preg_match('/\pL/u', 'a') == 1) {
- echo "PCRE Unicode Unterstützung ist eingeschaltet.\n";
- } else {
- echo "PCRE Unicode Unterstützung ist ausgeschaltet.\n";
- }
- ]]></programlisting>
- <para>
- Groß-/Kleinschreibungs-unabhängige Versionen von UTF-8 kompatiblen Analysatoren
- erfordern das die <ulink
- url="http://www.php.net/manual/en/ref.mbstring.php">mbstring</ulink> Erweiterung
- aktiviert ist.
- </para>
- <para>
- 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:
- </para>
- <programlisting language="php"><![CDATA[
- // 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));
- ]]></programlisting>
- <programlisting language="php"><![CDATA[
- // 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));
- ]]></programlisting>
- </sect2>
- </sect1>
|