Горячее резервное копирование индекса Lucene с использованием IndexReader вместо IndexWriter / SnapshotDeletionPolicy - PullRequest
7 голосов
/ 03 июня 2011

Допустимы ли следующие строки кода для получения горячей копии индекса lucene или IndexWriter / SnapshotDeletionPolicy, как описано в Следует выполнять резервное копирование индекса Lucene ?

Directory dir = ...;
IndexReader reader = IndexReader.open(dir);
IndexCommit commit = reader.getIndexCommit();
Collection<String> fileNames = commit.getFileNames();
//copy the files
reader.close();

Даже в заблокированном индексе вы можете открыть читателя в точке фиксации, в то время как писатель все еще может изменить индекс.

Ответы [ 2 ]

2 голосов
/ 04 июня 2011

Если у вас нет IndexWriter для записи в индекс, то приведенный выше код подходит.

Но открытый IndexWriter для индекса может легко удалить файлы, на которые ссылается / все еще использует этот IndexReader (например,когда слияние завершится), и тогда ваше резервное копирование не удастся.

1 голос
/ 03 июня 2011

Вам необходимо использовать SnapshotDeletionPolicy.

Если у вас нет неизданного снимка, автор может свободно удалять файлы по своему усмотрению. Это будет происходить только при промывке / закрытии, так что вы можете сойти с рук большую часть времени, но это не всегда будет работать.

Обратите внимание, что политика принадлежит автору записи, поэтому, если вы пытаетесь каким-то образом использовать один процесс для резервного копирования, пока другой процесс пишет, это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...