Индекс совместно используется несколькими IndexWriters. Очевидно, LockObtainFailedException
будет выброшено, если индекс открытия собирается открыться другим IndexWriter.
Мое решение состоит в том, чтобы создать IndexWriter с длительным временем ожидания:
IndexWriterConfig conf= new IndexWriterConfig(Version.LUCENE_30, new SimpleAnalyzer (Version.LUCENE_30));
conf.setWriteLockTimeout(30*1000);//Wait 30 seconds timeout
try{
IndexWriter writer = new IndexWriter(dir, conf);
}catch(LockObtainFailedException e){
System.out.println("give up trying...");
}
Есть ли лучшее решение для этого случая?
РЕДАКТИРОВАТЬ: вдохновленный Тило. Я нашел JavaDoc для IndexWriter:
Экземпляры IndexWriter полностью потокобезопасны , что означает, что несколько потоков могут одновременно вызывать любой из его методов. Если вашему приложению требуется внешняя синхронизация, вам не следует выполнять синхронизацию на экземпляре IndexWriter, так как это может привести к тупику; используйте вместо этого ваши собственные (не Lucene) объекты.