14.7. Java Lucene との相互運用

14.7.1. ファイルフォーマット

Zend_Search_Lucene のインデックスファイルのフォーマットは、 Lucene バージョン 1.4 以降とバイナリ互換性があります。

このファイルフォーマットについての詳細な説明は http://lucene.apache.org/java/docs/fileformats.html にあります。

14.7.2. インデックスディレクトリ

インデックスを作成すると、 インデックスディレクトリにはいくつかのファイルが出来上がります。

  • segments ファイルはインデックスセグメントの一覧です。

  • *.cfs ファイルにはインデックスセグメントが含まれます。 注意! 最適化されたインデックスは常にひとつのセグメントだけになります。

  • deletable ファイルは、 もはやインデックスからは使用されていないけれども削除できないファイルの一覧です。

14.7.3. Java のソースコード

以下の Java プログラムリストは、Java Lucene を使用してファイルのインデックスを作成する方法を示す例です。

/**
* インデックスの作成
*/
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.document.*;

import java.io.*

...

IndexWriter indexWriter = new IndexWriter("/data/my_index", 
                                          new SimpleAnalyzer(), true);

...

String filename = "/path/to/file-to-index.txt"
File f = new File(filename);

Document doc = new Document();
doc.add(Field.Text("path", filename));
doc.add(Field.Keyword("modified",DateField.timeToString(f.lastModified())));
doc.add(Field.Text("author", "unknown"));
FileInputStream is = new FileInputStream(f);
Reader reader = new BufferedReader(new InputStreamReader(is));
doc.add(Field.Text("contents", reader));

indexWriter.addDocument(doc);
        

14.7.4. LuceneIndexCreation.jar の使用法

Zend_Search_Lucene を手っ取り早く使用できるように、 JAR ファイル (Java) が作成されました。 これを使用すると、コマンドラインからインデックスを作成することができます。 JAR ファイルについての詳細な情報は、 http://java.sun.com/docs/books/tutorial/jar/basics/index.html を参照ください。

LuceneIndexCreation.jar は、 テキストファイルを読み込んでインデックスを作成します。 使用法は以下のとおりです。

    java -jar LuceneIndexCreation.jar [-c] [-s] <document_dir> <index_dir>
    -c   - インデックスの大文字小文字を区別します
    -s   - コンテンツをインデックスに保存します
    

このコマンドは、ディレクトリ <document_dir> およびそのサブディレクトリの内容を読み込んで、Lucene インデックスを作成します。 インデックスはいくつかのファイルで構成されており、 <index_dir> で指定したディレクトリに作成されます。

各ドキュメントについて、LuceneIndexCreation は以下の 3 つのフィールドからなるドキュメントオブジェクトを作成します。 contents にはドキュメントの内容が含まれ、 modified にはファイルの更新日時が含まれます。 またドキュメントのフルパスおよびファイル名が path に含まれます。

-c を指定すると、 インデックスの大文字小文字を区別するようにします。 指定しない場合は、インデックスに追加する前にすべての単語が小文字に変換されます。

-s を指定すると、ドキュメントのコンテンツも インデックスに保存されます。保存された内容は、 path フィールドおよび modified フィールドとともに取得できるようになります。

指定しない場合は、path フィールドおよび modified フィールドのみが保存されます。 contents フィールドはインデックス化のみが行われます。 この場合、ドキュメントのコンテンツを取得するには、 path の内容から元のドキュメントを参照しなければなりません。

-s オプションを使用すると、 インデックスの大きさが約 5 倍になることに注意しましょう。