目次へ

1.2. インデックスの作成

Luceneではインデックスを以下の手順で作成します。
  1. IndexWriterの作成
  2. 文書の解析
  3. 文書の登録
  4. インデックスの最適化
  5. IndexWriterの解放
Luceneは全文検索プログラムを作成する助けとなる使いやすいAPIを提供します。 しかし与えられた文書を解析してインデックスを作成するだけですので、 例えばHTMLを解析したい場合には、HTMLからインデックス作成対象とする文章を抽出するプログラムを、別途実装する必要があります。

ここではテキストファイルなど、全内容を解析対象とするするインデックス作成プログラムの例を示します。

import java.io.File;
import java.io.Reader;
import java.io.FileReader;
import java.io.IOException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.analysis.ja.JapaneseAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

public class SampleIndex{

    public static void main(String[] args)throws IOException{
    
        boolean create = true;
        
        //インデックスに登録するファイルのあるディレクトリ
        File directory = new File(args[0]);
        //ディレクトリにあるファイルリストの取得
        String[] filepath = directory.list();

        //インデックスの保存先
        String index = args[1];

        //インデクサの生成
        IndexWriter writer = new IndexWriter(index, new JapaneseAnalyzer(), create);

        for (int i = 0; i < filepath.length; i++) {
            //文書の解析
            Document doc = new Document();
            //ファイルパスの登録
            doc.add(Field.UnIndexed("url", filepath[i]));
            Reader reader = new FileReader(filepath[i]);
            //文書の中身の登録
            doc.add(Field.Text("contents",reader));
            writer.addDocument(doc);          
        }
        
        //インデクサのクローズ
        writer.optimize();
        writer.close();
    }
}

文書の情報は「org.apache.lucene.document.Document」を用いてインデックスに登録します。 Documentにはインデックス作成対象にする情報だけでなく、対象にしない情報も登録することができます。 例では対象にしない情報として「url」、対象にする情報として「contents」を登録しています。 適切に情報を入力したDocumentを引数に、「org.apache.lucene.index.IndexWriter」のaddDocument(Document) を呼ぶことでインデックスに情報を保存できます。 文書を登録したのちにIndexWriterのoptimize()を呼んでインデックスを最適化し、IndexWriterを解放します。

senを使ったアプリケーションでは、実行時にJavaの引数として

-Dsen.home=[senをインストールしたフォルダのパス]
を指定する必要があります。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp