Lucene 1章 Luceneの概要
- 1.1. Luceneについて
- 1.2. インデックスの作成
- 1.3. インデックスからの検索
1.2. インデックスの作成
Luceneではインデックスを以下の手順で作成します。- IndexWriterの作成
- 文書の解析
- 文書の登録
- インデックスの最適化
- IndexWriterの解放
ここではテキストファイルなど、全内容を解析対象とするするインデックス作成プログラムの例を示します。
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をインストールしたフォルダのパス]を指定する必要があります。