15.5. 文字セット
前のページ | 第15章 Zend_Search | 次のページ

## 15.5. 文字セット

### 15.5.1. UTF-8 およびシングルバイト文字セットのサポート

Zend_Search_Lucene は、UTF-8 文字セットで動作するように設計されています。 インデックスファイルには、unicode のデータが Java の "modified UTF-8 encoding" で保存されます。 Zend_Search_Lucene はこの文字セットを完全にサポートしていますが、 ひとつだけ例外があります。 [6]

しかし、テキスト解析器およびクエリパーサは、 テキストやクエリをトークン化する際に ctype_alpha() を使用しています。ctype_alpha() は UTF-8 をサポートしていません。この処理は近いうちに書き直す必要があります。

それまでの間は、データを ASCII 表現に変換しておくことを強く推奨します [7] (ソースドキュメントの保存時と検索時の両方とも)。

    <?php
    $doc = new Zend_Search_Lucene_Document();
    ...
    $docText = iconv('ISO-8859-1', 'ASCII//TRANSLIT', $docText);
    $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $docText));

    ...

    $query = iconv('', 'ASCII//TRANSLIT', $query);
    $hits = $index->find($query);
    ?>

[6] Zend_Search_Lucene では Basic Multilingual Plane (BMP) 文字 (0x0000 から 0xFFFF まで) のみをサポートしており、 "supplementary characters" (コードポイントが 0xFFFF より大きい文字) はサポートしていません。

Java 2 では、これらを文字 (16 ビット) のペアで表します。最初の文字が上位サロゲート (0xD800-0xDBFF)、 2 番目の文字が下位サロゲート (0xDC00-0xDFFF) となります。 その後、これらが 6 バイトの UTF-8 文字にエンコードされます。 標準的な UTF-8 では、supplementary characters を 4 バイトで表します。

[7] もしデータに非 ASCII 文字が含まれていたり UTF-8 だったりした場合

前のページ | 上に戻る | 次のページ
15.4. クエリの形式 | ホーム | 15.6. 拡張性