2012-09-04 4 views
0

Моего вопроса, связанного с следующим фрагментом кода:Lucene .NET IndexWriter блокировка

static void Main(string[] args) 
{ 
    Lucene.Net.Store.Directory d = FSDirectory.Open(new DirectoryInfo(/*my index path*/)); 
    IndexWriter writer = new IndexWriter(d, new WhitespaceAnalyzer()); 

    //Exiting without closing the indexd writer... 
} 

В этом тесте я открыл IndexWriter, не закрывая его - так что даже после того, как тест выходов, файл write.lock по-прежнему существует в индексном каталоге, поэтому я ожидал, что в следующий раз, когда я открою экземпляр IndexWriter для этого индекса, будет выброшен LockObatinFailedException. Может кто-нибудь объяснить мне, почему я ошибаюсь? Я имею в виду, значит ли смысл файла write.lock защищать создание двух индексов в одном и том же процессе? то не кажется, правильный ответ на меня ...

ответ

2

Похоже, есть ошибка с этим IndexWriter конструктора, если вы измените свой код:

IndexWriter writer = new IndexWriter("Path to index here", new WhitespaceAnalyzer()); 

Вы получите исключение.

Файл блокировки используется для предотвращения открытия 2 IndexWriter по тому же индексу, независимо от того, находятся они в одном процессе или нет. Вы правы, чтобы ожидать там Исключения.

+0

Кажется, что вы правы! Все конструкторы, которые берут Directory вместо строки wont throw exception ... Интересно, была ли эта проблема исправлена ​​в более поздней версии. Во всяком случае, спасибо большое :) –

Смежные вопросы