2
0

Zend_Search_Lucene-Charset.xml 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <sect1 id="zend.search.lucene.charset">
  2. <title>Кодировки<!--Character set.--></title>
  3. <sect2 id="zend.search.lucene.charset.description">
  4. <title>Поддержка UTF-8 и однобайтных наборов символов<!--UTF-8 and single-byte character sets support.--></title>
  5. <para>
  6. Zend_Search_Lucene в своей работе использует кодировку UTF-8.
  7. Файлы индекса хранят данные unicode в кодировке Modified UTF-8 от
  8. Java. Ядро Zend_Search_Lucene полностью поддерживает его за одним
  9. исключением.
  10. <!--
  11. Zend_Search_Lucene works with UTF-8 charset internally. Index files store
  12. unicode data in Java's "modified UTF-8 encoding". Zend_Search_Lucene core
  13. completely supports it with one exception.
  14. -->
  15. <footnote>
  16. <para>
  17. Zend_Search_Lucene поддерживает только символы
  18. Basic Multilingual Plane (от 0x0000 до 0xFFFF) и не
  19. поддерживает дополнительные символы (символы, чьи коды больше
  20. 0xFFFF).
  21. <!--
  22. Zend_Search_Lucene supports only Basic Multilingual Plane
  23. (BMP) characters (from 0x0000 to 0xFFFF) and doesn't support
  24. "supplementary characters" (characters whose code points are
  25. greater than 0xFFFF)
  26. -->
  27. </para>
  28. <para>
  29. Java 2 представляет эти символыв виде пары значений
  30. символьного типа (16 бит), перое из диапазона 0xD800-0xDBFF,
  31. второе из диапазона 0xDC00-0xDFFF. Тогда они кодируются как
  32. обычные символы UTF-8 в шести байтах. Стандартное
  33. представление UTF-8 использует четыре байта для
  34. дополнительных символов.
  35. <!--
  36. Java 2 represents these characters as a pair of char (16-bit)
  37. values, the first from the high-surrogates range (0xD800-0xDBFF),
  38. the second from the low-surrogates range (0xDC00-0xDFFF). Then
  39. they are encoded as usual UTF-8 characters in six bytes.
  40. Standard UTF-8 representation uses four bytes for supplementary
  41. characters.
  42. -->
  43. </para>
  44. </footnote>
  45. </para>
  46. <para>
  47. Действующая кодировка для входных данных может быть указана через
  48. API Zend_Search_Lucene. Данные будут автоматически преобразованы в
  49. кодировку UTF-8.
  50. <!--
  51. Actual input data encoding may be specified through Zend_Search_Lucene API. Data will
  52. be automatically converted into UTF-8 encoding.
  53. -->
  54. </para>
  55. </sect2>
  56. <sect2 id="zend.search.lucene.charset.default_analyzer">
  57. <title>Используемый по умолчанию анализатор текста<!--Default text analyzer--></title>
  58. <para>
  59. Несмотря на это, используемый по умолчанию анализатор текста
  60. (который также применяется в парсере запросов) использует
  61. <code>ctype_alpha()</code> для разбиения текста и поисковых
  62. запросов на лексемы.
  63. <!--
  64. However, default text analyzer (which is also used within query parser) uses
  65. ctype_alpha() for tokenizing text and queries.
  66. -->
  67. </para>
  68. <para>
  69. <code>ctype_alpha()</code> не является совместимым с UTF-8, поэтому
  70. анализатор конвертирует текст в кодировку 'ASCII//TRANSLIT' до
  71. индексации. То же самое выполняется при парсинге запросов.
  72. <!--
  73. ctype_alpha() is not UTF-8 compatible, so analyzer converts text to 'ASCII//TRANSLIT' encoding before
  74. indexing. The same processing is performed during query parsing, so it's done
  75. transparently.
  76. -->
  77. <footnote>
  78. <para>
  79. Преобразование в 'ASCII//TRANSLIT' может зависеть от текущей
  80. локали и операционной системы.
  81. <!--
  82. Conversion to 'ASCII//TRANSLIT' may depend on current locale and OS.
  83. -->
  84. </para>
  85. </footnote>
  86. </para>
  87. </sect2>
  88. <sect2 id="zend.search.lucene.charset.utf_analyzer">
  89. <title>Совместимый с UTF-8 анализатор текста<!--UTF-8 compatible text analyzer.--></title>
  90. <para>
  91. Zend_Search_Lucene также содержит совместимый с UTF-8 анализатор
  92. текста с ограниченным функционалом.
  93. <!--
  94. Zend_Search_Lucene also contains limited functionaliy utf-8 analyzer. It can be turned on with the following code:
  95. -->
  96. <programlisting language="php"><![CDATA[<?php
  97. Zend_Search_Lucene_Analysis_Analyzer::setDefault(
  98. new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());]]></programlisting>
  99. </para>
  100. <para>
  101. Он разбивает на лексемы данные для индексации в режиме UTF-8, не
  102. испытывая проблем с любыми входящими в UTF-8 символами.
  103. <!--
  104. It tokenizes data for indexing in UTF-8 mode and has no problems with any UTF-8 compatible character.
  105. -->
  106. </para>
  107. <para>
  108. Данный анализатор имеет два ограничения:
  109. <!--
  110. It has two limitations:
  111. -->
  112. <itemizedlist>
  113. <listitem>
  114. <para>
  115. обрабатывает все не входящие в кодировку ASCII как буквы;
  116. <!--
  117. treats all non-ascii characters as letters (it's not always true);
  118. -->
  119. </para>
  120. </listitem>
  121. <listitem>
  122. <para>
  123. является чувствительным к регистру;
  124. <!--
  125. is case-sensitive;
  126. -->
  127. </para>
  128. </listitem>
  129. </itemizedlist>
  130. </para>
  131. <para>
  132. Из-за этих ограничений он не используется по умолчанию, но может
  133. быть полезен некоторым.
  134. <!--
  135. Because of these limitations it's not set as default, but may be helpful for someone.
  136. -->
  137. </para>
  138. <para>
  139. Нечувствительность к регистру может быть сэмулирована с помощью
  140. <code>strtolower()</code>.
  141. <!--
  142. Case insensitivity my be emulated with <code>strtolower()</code> conversion:
  143. -->
  144. <programlisting language="php"><![CDATA[<?php
  145. setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
  146. ...
  147. Zend_Search_Lucene_Analysis_Analyzer::setDefault(
  148. new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
  149. ...
  150. $doc = new Zend_Search_Lucene_Document();
  151. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', strtolower($contents)));
  152. // Поле заголовка для поиска
  153. // (индексируется, но не сохраняется в индексе)
  154. $doc->addField(Zend_Search_Lucene_Field::UnStored('title', strtolower($title)));
  155. // Поле заголовка для возвращения в результатах поиска
  156. // (не индексируется, но сохраняется)
  157. $doc->addField(Zend_Search_Lucene_Field::UnIndexed('_title', $title));]]></programlisting>
  158. </para>
  159. <para>
  160. То же самое преобразование должно выполняться и для запросов:
  161. <!--
  162. The same conversion has to be performed with query string:
  163. -->
  164. <programlisting language="php"><![CDATA[<?php
  165. setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
  166. ...
  167. Zend_Search_Lucene_Analysis_Analyzer::setDefault(
  168. new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
  169. ...
  170. $hits = $index->find(strtolower($query));]]></programlisting>
  171. </para>
  172. </sect2>
  173. </sect1>
  174. <!--
  175. vim:se ts=4 sw=4 et:
  176. -->