lucene 更新或添加 正在使用的索引文件问题
moshalanye
2008-09-24
问题是这样的,我起了一个lucene的搜索的服务,索引文件是一直在被服务使用(被搜索),这个时候不轮我是需要添加索引 或是 更新删除索引,如果在当前运行的索引目录中做 这些操作,是不安全的,也会出现一些莫名的问题,(因为在我看来,读是没有事务锁的,在线使用的索引应该是可以允许单线程使用唯一的indexwriter 和 indexreader进行添加或删除,但是往往不是想象那样,依然是会出现问题)
所以现在解决问题的方法是:拷贝现在的索引文件出来,在temp环境下进行一系列的索引操作,然后把完成的新索引(索引所在的文件夹以完成时间命名)放在一个目录中,然后停服务,复制最晚完成的索引文件替换服务使用的索引文件夹内容。 于是疑问来了:难道我每次批量做了后都要停服务吗?? 没天理阿! 其实我还有一个想法就是,就是批量更新的线程更新完后,对搜索的索引的对象indexsearch 的对象重新初始化,把它的查询路径换到我现在新建的索引上去 希望有人看到我的问题,给点启示!谢谢! |
|
javaeyes
2008-09-24
是呀, 是你自己没天理呀。
你不可以在新索引上直接生成Seacher投到服务中?旧的就可以关闭删除了嘛 |