Перемещение индекса Lucene на другой сервер - PullRequest
1 голос
/ 15 марта 2011

Я нахожусь в процессе перевода моей индексации Lucene в автономный режим, чтобы ее выполнял пользователь очереди JMS.У меня все работает как надо.Он правильно создает индекс, и я могу rsync файлы индекса в новый ящик.Вопрос в том, как лучше всего использовать Lucene для использования нового индекса?Как другие повторно инициализируют свои IndexWriters для использования новых файлов индекса?Спасибо!

1 Ответ

1 голос
/ 16 марта 2011

Для тех, кто придет за мной, вот что я сделал.

Цель состояла в том, чтобы мой потребитель JMS генерировал мой индекс lucene, а затем каждый из моих серверов извлекал этот новый индекс после его завершения.,Вот шаги, которые я предпринял:

  • Создал crontab для создания моего нового индекса каждую ночь
  • Создал crontab для вызова скрипта updateLuceneIndex.sh для обновления нового индекса на каждом сервере

! / Bin / sh

TIME = date +%s;rsync -av tomcat@consumer1.* .com: / home / tomcat / lucene / home / tomcat / luceneэхо $ TIMEmv -f / home / tomcat / lucene / lucene / home / tomcat / lucene / $ TIME

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

/home/tomcat/lucene/1300291879
  • Код сервера захватит список каталогов в каталоге / home / tomcat / lucene.
  • Сортирует их по имени нового каталога изахватывает последний (самый новый)
  • Сервер, который удаляет все старые индексы, кроме последних 2 (в случае, если один поврежден)
  • Я создаю новый IndexReader, указывающий на новый каталог

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

Вот этот код:

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");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...