Почему мой индекс Lucene блокируется? - PullRequest
4 голосов
/ 26 февраля 2010

У меня возникла проблема с поиском, который не дал ожидаемых результатов.

Я пытался запустить Люка на своем индексе, но он сказал, что он заблокирован, и мне нужно было принудительно разблокировать его (хотя я не джедай / ситх)

Я попытался удалить папку индекса и запустить приложение для восстановления данных, но папка была заблокирована. Используя unlocker, я обнаружил, что существует около 100 записей w3wp.exe (один и тот же PID, другой дескриптор) с блокировкой индекса.

Что происходит?

Я делаю это в своей конфигурации NHibernate:

c.SetListener(ListenerType.PostUpdate, new FullTextIndexEventListener());
c.SetListener(ListenerType.PostInsert, new FullTextIndexEventListener());
c.SetListener(ListenerType.PostDelete, new FullTextIndexEventListener());

И вот единственное место, где я запрашиваю индекс:

var fullTextSession = NHibernate.Search.Search.CreateFullTextSession(this.unitOfWork.Session);

var fullTextQuery = fullTextSession.CreateFullTextQuery(query, typeof (Person));
fullTextQuery.SetMaxResults(100);

return fullTextQuery.List<Person>();

Что происходит? Что я делаю не так?

Спасибо

Ответы [ 3 ]

4 голосов
/ 26 февраля 2010

Индекс Lucene.Net блокирует только одновременные запись операций в индексе. У вас может быть столько потоков, сколько вам нужно для поиска / чтения из индекса, и они не будут блокироваться - либо друг с другом, либо с любым, кто выполняет запись, однако, если у вас есть два потока, выполняющих запись в индекс одновременно, существует вероятность того, что один из них заблокирует другой.

Если lucene сообщает, что ваш индекс заблокирован, то это означает, что либо кто-то в данный момент пишет в индекс, либо (это звучит более вероятно) что-то, что записывало в индекс, было уничтожено во время записи, и поэтому не смог снять блокировку , Вам следует убедиться, что вы правильно удаляете любые объекты Lucene, которые записывают в индекс, как только они будут сделаны.

Чтобы снять блокировку вручную, в каталоге Lucene есть файл .lock, который необходимо удалить (моя большая книга Lucene в данный момент не находится рядом со мной, поэтому я точно не знаю, где она находится, но делаю поиск "lock" или ".lock" в каталоге Lucene должен его найти)

Дескрипторы, которые w3wp.exe имел в этом каталоге, вероятно, были дескрипторами, принадлежащими потокам, считывающим из индекса lucene - хотя они не позволят вам удалить каталог, они не должны мешать вам выполнять поиск или запись в индекс .

1 голос
/ 23 марта 2010
1 голос
/ 22 марта 2010

Удалить файл "write.lock" в папке index.

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