并发,线程安全及锁
索引文件的并发访问,Reader和Writer的线程安全性,以及Lucene实现前两项内容的锁机制
线程安全
Lucene的并发处理规则
1.只读属性的IndexReader可以同时打开一个索引,最好的办法是用多线程共享单个IndexReader实例,多个线程并行搜索同一个索引.
获取一个IndexReader的方法:1
IndexReader dr = new DirectoryReader.open(fsDirectory);
2.一个索引一次只能打开一个Writer(使用文件锁).
索引锁机制
Lucene采用基于文件的锁,一般只允许一个witer打开同一个索引,可以修改锁实现方法:1
directory.setLockFactory(new NativFSLockFactory);
Lucene提供的锁实现:NativeFSLockFactory,SimpleFSFactory,SingleInstanceLockFactory,NoLockFactory
Lucene不提供申请锁的队列机制,需要自己实现
多线程和并行处理
使用多线程进行索引操作
调试索引
可以用一下方法将信息输出到控制台
1
IndexWriterConfig.setInfoStream(System.out);
使用Luke调试工具