背景
我假设以下代码是完全线程安全的:
// Called from a servlet when a user action results in the index needing to be updated
public static void rebuildIndex() {
FSDirectory dir = new NIOFSDirectory(new File(Configuration.getAttachmentFolder()), null);
IndexWriter w = new IndexWriter(dir, analyzer, IndexWriter.MaxFieldLength.UNLIMITED);
.... build index ...
w.optimize();
w.commit();
w.close();
}
从搜索servlet调用以下代码:
// Called by the search servlet
public void search() {
FSDirectory dir = new NIOFSDirectory(new File(Configuration.getAttachmentFolder()), null);
IndexReader indexReader = IndexReader.open(dir,true);
IndexSearcher searcher = new IndexSearcher(indexReader);
.... do the search ...
}
问题
我正在努力找出实现这一点的最佳/正确方法,以避免多线程问题:
-
应该
FSDirectory dir
对象是否共享为某种静态变量?
-
应该
IndexSearcher searcher
或
IndexReader indexReader
对象存储为静态变量,然后在重建索引时简单替换?