| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- <sect1 id="zend.search.lucene.charset">
- <title>Кодировки<!--Character set.--></title>
- <sect2 id="zend.search.lucene.charset.description">
- <title>Поддержка UTF-8 и однобайтных наборов символов<!--UTF-8 and single-byte character sets support.--></title>
- <para>
- Zend_Search_Lucene в своей работе использует кодировку UTF-8.
- Файлы индекса хранят данные unicode в кодировке Modified UTF-8 от
- Java. Ядро Zend_Search_Lucene полностью поддерживает его за одним
- исключением.
- <!--
- Zend_Search_Lucene works with UTF-8 charset internally. Index files store
- unicode data in Java's "modified UTF-8 encoding". Zend_Search_Lucene core
- completely supports it with one exception.
- -->
- <footnote>
- <para>
- Zend_Search_Lucene поддерживает только символы
- Basic Multilingual Plane (от 0x0000 до 0xFFFF) и не
- поддерживает дополнительные символы (символы, чьи коды больше
- 0xFFFF).
- <!--
- Zend_Search_Lucene supports only Basic Multilingual Plane
- (BMP) characters (from 0x0000 to 0xFFFF) and doesn't support
- "supplementary characters" (characters whose code points are
- greater than 0xFFFF)
- -->
- </para>
- <para>
- Java 2 представляет эти символыв виде пары значений
- символьного типа (16 бит), перое из диапазона 0xD800-0xDBFF,
- второе из диапазона 0xDC00-0xDFFF. Тогда они кодируются как
- обычные символы UTF-8 в шести байтах. Стандартное
- представление UTF-8 использует четыре байта для
- дополнительных символов.
- <!--
- Java 2 represents these characters as a pair of char (16-bit)
- values, the first from the high-surrogates range (0xD800-0xDBFF),
- the second from the low-surrogates range (0xDC00-0xDFFF). Then
- they are encoded as usual UTF-8 characters in six bytes.
- Standard UTF-8 representation uses four bytes for supplementary
- characters.
- -->
- </para>
- </footnote>
- </para>
- <para>
- Действующая кодировка для входных данных может быть указана через
- API Zend_Search_Lucene. Данные будут автоматически преобразованы в
- кодировку UTF-8.
- <!--
- Actual input data encoding may be specified through Zend_Search_Lucene API. Data will
- be automatically converted into UTF-8 encoding.
- -->
- </para>
- </sect2>
- <sect2 id="zend.search.lucene.charset.default_analyzer">
- <title>Используемый по умолчанию анализатор текста<!--Default text analyzer--></title>
- <para>
- Несмотря на это, используемый по умолчанию анализатор текста
- (который также применяется в парсере запросов) использует
- <code>ctype_alpha()</code> для разбиения текста и поисковых
- запросов на лексемы.
- <!--
- However, default text analyzer (which is also used within query parser) uses
- ctype_alpha() for tokenizing text and queries.
- -->
- </para>
- <para>
- <code>ctype_alpha()</code> не является совместимым с UTF-8, поэтому
- анализатор конвертирует текст в кодировку 'ASCII//TRANSLIT' до
- индексации. То же самое выполняется при парсинге запросов.
- <!--
- ctype_alpha() is not UTF-8 compatible, so analyzer converts text to 'ASCII//TRANSLIT' encoding before
- indexing. The same processing is performed during query parsing, so it's done
- transparently.
- -->
- <footnote>
- <para>
- Преобразование в 'ASCII//TRANSLIT' может зависеть от текущей
- локали и операционной системы.
- <!--
- Conversion to 'ASCII//TRANSLIT' may depend on current locale and OS.
- -->
- </para>
- </footnote>
- </para>
- </sect2>
- <sect2 id="zend.search.lucene.charset.utf_analyzer">
- <title>Совместимый с UTF-8 анализатор текста<!--UTF-8 compatible text analyzer.--></title>
- <para>
- Zend_Search_Lucene также содержит совместимый с UTF-8 анализатор
- текста с ограниченным функционалом.
- <!--
- Zend_Search_Lucene also contains limited functionaliy utf-8 analyzer. It can be turned on with the following code:
- -->
- <programlisting language="php"><![CDATA[<?php
- Zend_Search_Lucene_Analysis_Analyzer::setDefault(
- new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());]]></programlisting>
- </para>
- <para>
- Он разбивает на лексемы данные для индексации в режиме UTF-8, не
- испытывая проблем с любыми входящими в UTF-8 символами.
- <!--
- It tokenizes data for indexing in UTF-8 mode and has no problems with any UTF-8 compatible character.
- -->
- </para>
- <para>
- Данный анализатор имеет два ограничения:
- <!--
- It has two limitations:
- -->
- <itemizedlist>
- <listitem>
- <para>
- обрабатывает все не входящие в кодировку ASCII как буквы;
- <!--
- treats all non-ascii characters as letters (it's not always true);
- -->
- </para>
- </listitem>
- <listitem>
- <para>
- является чувствительным к регистру;
- <!--
- is case-sensitive;
- -->
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- Из-за этих ограничений он не используется по умолчанию, но может
- быть полезен некоторым.
- <!--
- Because of these limitations it's not set as default, but may be helpful for someone.
- -->
- </para>
- <para>
- Нечувствительность к регистру может быть сэмулирована с помощью
- <code>strtolower()</code>.
- <!--
- Case insensitivity my be emulated with <code>strtolower()</code> conversion:
- -->
- <programlisting language="php"><![CDATA[<?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)));
- // Поле заголовка для поиска
- // (индексируется, но не сохраняется в индексе)
- $doc->addField(Zend_Search_Lucene_Field::UnStored('title', strtolower($title)));
- // Поле заголовка для возвращения в результатах поиска
- // (не индексируется, но сохраняется)
- $doc->addField(Zend_Search_Lucene_Field::UnIndexed('_title', $title));]]></programlisting>
- </para>
- <para>
- То же самое преобразование должно выполняться и для запросов:
- <!--
- The same conversion has to be performed with query string:
- -->
- <programlisting language="php"><![CDATA[<?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));]]></programlisting>
- </para>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|