我正在将我的Lucene索引脱机移动,由一个JMS队列的conusmer完成。我完全按照它应有的方式工作。它正确创建索引,我能够将索引文件rsync到新框。问题是让Lucene使用新索引的最佳方法是什么?其他人如何重新初始化他们的IndexWriters以使用新的索引文件? 谢谢!
答案 0 :(得分:1)
对于那些追随我的人来说,这就是我所做的。
目标是让我的JMS使用者生成我的lucene索引,然后让我的每个服务器在完成后拉出新索引。 以下是我采取的步骤:
TIME = date +%s
;
rsync -av tomcat @ consumer1。 * .com:/ home / tomcat / lucene / home / tomcat / lucene
echo $ TIME
mv -f / home / tomcat / lucene / lucene / home / tomcat / lucene / $ TIME
如上所示,它使用时间戳作为目录名称,因此新索引将显示在名为
的文件夹中/home/tomcat/lucene/1300291879
我不确定这是否是线程安全的。我想如果有人试图在我切换时尝试搜索它们会得到一个错误,但我目前没有那么多的搜索来实现这种可能的情况。然而,随着我们的流量增长,它肯定会成为事情可能破裂的地方。如果有人知道更好的方法请指教。
这是代码:
public void initialize(File newIndexDirectory) throws CorruptIndexException, IOException {
try {
File path = (newIndexDirectory == null) ? new File(indexDirectory) : newIndexDirectory;
Directory index = new SimpleFSDirectory(path);
searcher = new IndexSearcher(index);
logger.debug("Successfully initialized index at: " + path.getAbsolutePath());
currentIndexFile = path;
} catch (Exception e) {
logger.warn("Lucene index is corrupt");
}
}