私はApache Luceneを使用しています。私のデータベースは約3GBです。Luceneでインデックスを更新するには
Luceneを初めて使用してインデックスを作成するときは、約25分かかります。しかし、私はそれを使用しているたびに更新されるような私のアプリケーションが欲しいです。
どのようにこれらのことを行うことができます私のインデックスは毎回更新することができますし、更新するのにかかる時間は短くなりますか?
データベースの変更は非常に少ないですが、データベースの新しいエントリにはインデックスを付ける必要があります。
Directory directory = new SimpleFSDirectory(INDEX_DIRECTORY);
//Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
SimpleAnalyzer analyzer = new SimpleAnalyzer(Version.LUCENE_36);
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_36, analyzer);
indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
IndexWriter iWriter = new IndexWriter(FSDirectory.open(indexDirNEW), indexWriterConfig);
IndexWriter iWriter = new IndexWriter(directory, analyzer, true,MaxFieldLength.UNLIMITED);
int count = 0;
while(rs.next()) {
Document doc = new Document();
doc.add(new Field("NAME", rs.getString("NAME")==null?"":rs.getString("NAME"), Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("CUSTOMER", rs.getString("CUSTOMER")==null?"":rs.getString("CUSTOMER"), Field.Store.YES, Field.Index.ANALYZED));
iWriter.addDocument(doc);
count++;
}
System.out.println(count+" record indexed");
iWriter.optimize();
iWriter.commit();
iWriter.close();
最も明らかなスピードアップは、optimize()を呼び出さないことです。あなたの実行時間がどこに費やされているかを見るためにコードをプロファイリングしましたか? – sisve