API для построения запросовQuery Construction API

Кодировки

Поддержка UTF-8 и однобайтных наборов символов

Zend_Search_Lucene в своей работе использует кодировку UTF-8. Файлы индекса хранят данные unicode в кодировке Modified UTF-8 от Java. Ядро Zend_Search_Lucene полностью поддерживает его за одним исключением. [1]

Действующая кодировка для входных данных может быть указана через API Zend_Search_Lucene. Данные будут автоматически преобразованы в кодировку UTF-8.

Используемый по умолчанию анализатор текста

Несмотря на это, используемый по умолчанию анализатор текста (который также применяется в парсере запросов) использует ctype_alpha() для разбиения текста и поисковых запросов на лексемы.

ctype_alpha() не является совместимым с UTF-8, поэтому анализатор конвертирует текст в кодировку 'ASCII//TRANSLIT' до индексации. То же самое выполняется при парсинге запросов. [2]

Совместимый с UTF-8 анализатор текста

Zend_Search_Lucene также содержит совместимый с UTF-8 анализатор текста с ограниченным функционалом.

  1.  

Он разбивает на лексемы данные для индексации в режиме UTF-8, не испытывая проблем с любыми входящими в UTF-8 символами.

Данный анализатор имеет два ограничения:

  • обрабатывает все не входящие в кодировку ASCII как буквы;

  • является чувствительным к регистру;

Из-за этих ограничений он не используется по умолчанию, но может быть полезен некоторым.

Нечувствительность к регистру может быть сэмулирована с помощью strtolower().

  1. span style="color: #ff0000;">'de_DE.iso-8859-1''contents'// Поле заголовка для поиска
  2. // (индексируется, но не сохраняется в индексе)
  3. 'title'// Поле заголовка для возвращения в результатах поиска
  4. // (не индексируется, но сохраняется)
  5. '_title', $title));

То же самое преобразование должно выполняться и для запросов:

  1. span style="color: #ff0000;">'de_DE.iso-8859-1'

[1] Zend_Search_Lucene поддерживает только символы Basic Multilingual Plane (от 0x0000 до 0xFFFF) и не поддерживает дополнительные символы (символы, чьи коды больше 0xFFFF). Java 2 представляет эти символыв виде пары значений символьного типа (16 бит), перое из диапазона 0xD800-0xDBFF, второе из диапазона 0xDC00-0xDFFF. Тогда они кодируются как обычные символы UTF-8 в шести байтах. Стандартное представление UTF-8 использует четыре байта для дополнительных символов.
[2] Преобразование в 'ASCII//TRANSLIT' может зависеть от текущей локали и операционной системы.

API для построения запросовQuery Construction API