1 <sect1 id="zend.search.lucene.charset">
2 <title>Кодировки<!--Character set.--></title>
4 <sect2 id="zend.search.lucene.charset.description">
5 <title>Поддержка UTF-8 и однобайтных наборов символов<!--UTF-8 and single-byte character sets support.--></title>
8 Zend_Search_Lucene в своей работе использует кодировку UTF-8.
9 Файлы индекса хранят данные unicode в кодировке Modified UTF-8 от
10 Java. Ядро Zend_Search_Lucene полностью поддерживает его за одним
13 Zend_Search_Lucene works with UTF-8 charset internally. Index files store
14 unicode data in Java's "modified UTF-8 encoding". Zend_Search_Lucene core
15 completely supports it with one exception.
19 Zend_Search_Lucene поддерживает только символы
20 Basic Multilingual Plane (от 0x0000 до 0xFFFF) и не
21 поддерживает дополнительные символы (символы, чьи коды больше
24 Zend_Search_Lucene supports only Basic Multilingual Plane
25 (BMP) characters (from 0x0000 to 0xFFFF) and doesn't support
26 "supplementary characters" (characters whose code points are
31 Java 2 представляет эти символыв виде пары значений
32 символьного типа (16 бит), перое из диапазона 0xD800-0xDBFF,
33 второе из диапазона 0xDC00-0xDFFF. Тогда они кодируются как
34 обычные символы UTF-8 в шести байтах. Стандартное
35 представление UTF-8 использует четыре байта для
36 дополнительных символов.
38 Java 2 represents these characters as a pair of char (16-bit)
39 values, the first from the high-surrogates range (0xD800-0xDBFF),
40 the second from the low-surrogates range (0xDC00-0xDFFF). Then
41 they are encoded as usual UTF-8 characters in six bytes.
42 Standard UTF-8 representation uses four bytes for supplementary
51 Действующая кодировка для входных данных может быть указана через
52 API Zend_Search_Lucene. Данные будут автоматически преобразованы в
55 Actual input data encoding may be specified through Zend_Search_Lucene API. Data will
56 be automatically converted into UTF-8 encoding.
61 <sect2 id="zend.search.lucene.charset.default_analyzer">
62 <title>Используемый по умолчанию анализатор текста<!--Default text analyzer--></title>
65 Несмотря на это, используемый по умолчанию анализатор текста
66 (который также применяется в парсере запросов) использует
67 <code>ctype_alpha()</code> для разбиения текста и поисковых
70 However, default text analyzer (which is also used within query parser) uses
71 ctype_alpha() for tokenizing text and queries.
76 <code>ctype_alpha()</code> не является совместимым с UTF-8, поэтому
77 анализатор конвертирует текст в кодировку 'ASCII//TRANSLIT' до
78 индексации. То же самое выполняется при парсинге запросов.
80 ctype_alpha() is not UTF-8 compatible, so analyzer converts text to 'ASCII//TRANSLIT' encoding before
81 indexing. The same processing is performed during query parsing, so it's done
86 Преобразование в 'ASCII//TRANSLIT' может зависеть от текущей
87 локали и операционной системы.
89 Conversion to 'ASCII//TRANSLIT' may depend on current locale and OS.
96 <sect2 id="zend.search.lucene.charset.utf_analyzer">
97 <title>Совместимый с UTF-8 анализатор текста<!--UTF-8 compatible text analyzer.--></title>
100 Zend_Search_Lucene также содержит совместимый с UTF-8 анализатор
101 текста с ограниченным функционалом.
103 Zend_Search_Lucene also contains limited functionaliy utf-8 analyzer. It can be turned on with the following code:
106 <programlisting language="php"><![CDATA[<?php
107 Zend_Search_Lucene_Analysis_Analyzer::setDefault(
108 new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());]]></programlisting>
112 Он разбивает на лексемы данные для индексации в режиме UTF-8, не
113 испытывая проблем с любыми входящими в UTF-8 символами.
115 It tokenizes data for indexing in UTF-8 mode and has no problems with any UTF-8 compatible character.
120 Данный анализатор имеет два ограничения:
122 It has two limitations:
127 обрабатывает все не входящие в кодировку ASCII как буквы;
129 treats all non-ascii characters as letters (it's not always true);
135 является чувствительным к регистру;
145 Из-за этих ограничений он не используется по умолчанию, но может
146 быть полезен некоторым.
148 Because of these limitations it's not set as default, but may be helpful for someone.
153 Нечувствительность к регистру может быть сэмулирована с помощью
154 <code>strtolower()</code>.
156 Case insensitivity my be emulated with <code>strtolower()</code> conversion:
158 <programlisting language="php"><![CDATA[<?php
159 setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
163 Zend_Search_Lucene_Analysis_Analyzer::setDefault(
164 new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
168 $doc = new Zend_Search_Lucene_Document();
170 $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', strtolower($contents)));
172 // Поле заголовка для поиска
173 // (индексируется, но не сохраняется в индексе)
174 $doc->addField(Zend_Search_Lucene_Field::UnStored('title', strtolower($title)));
176 // Поле заголовка для возвращения в результатах поиска
177 // (не индексируется, но сохраняется)
178 $doc->addField(Zend_Search_Lucene_Field::UnIndexed('_title', $title));]]></programlisting>
182 То же самое преобразование должно выполняться и для запросов:
184 The same conversion has to be performed with query string:
186 <programlisting language="php"><![CDATA[<?php
187 setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
191 Zend_Search_Lucene_Analysis_Analyzer::setDefault(
192 new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
196 $hits = $index->find(strtolower($query));]]></programlisting>