Taka-Coma's Blog

http://taka-coma.pro/

Lucene のインストールと簡単な使い方

環境

インストール

とりあえず使ってみる

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import java.nio.file.Paths;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;

import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.queryparser.classic.QueryParser;

public class Test{
  public static void main( String[] args ){
    StandardAnalyzer analyzer = new StandardAnalyzer();

    try{
      // インデックスの構築
      // インメモリインデックス
      //dir = new RAMDirectory();
      // ファイルインデックス
      dir = FSDirectory.open(Paths.get("./index"));
      IndexWriterConfig conf = new IndexWriterConfig(analyzer);
      IndexWriter w = new IndexWriter(dir, conf);

      // 文書の追加(3個)
      Document doc = new Document();
      doc.add(new Field("title", "This is the title of an article.", TextField.TYPE_STORED));
      w.addDocument(doc);

      doc = new Document();
      doc.add(new Field("title", "That is the title of an article.", TextField.TYPE_STORED));
      w.addDocument(doc);

      doc = new Document();
      doc.add(new Field("title", "That is the test of an article.", TextField.TYPE_STORED));
      w.addDocument(doc);

      // インデックスの保存
      w.close();

      // インデックスを使って検索
      DirectoryReader reader = DirectoryReader.open(dir);
      IndexSearcher searcher = new IndexSearcher(reader);

      // クエリ処理
      QueryParser parser = new QueryParser("title", analyzer);
      Query q = parser.parse("test");

      // 上位1000件検索
      ScoreDoc[] results = searcher.search(q, 1000).scoreDocs;
      for(ScoreDoc res: results){
        Document doc = searcher.doc(res.doc);
        System.out.println(doc);
      }   

      reader.close();
      dir.close();
    }catch(Exception e){ 
      e.printStackTrace();
    }   

  }
}
  • 結果
$ java Test
Document<stored,indexed,tokenized<title:That is the test of an article.>>
  • test が含まれているのはこいつだけなので,検索成功