2012-08-22 20 views
7

Mój indekser, używając Lucene, wydaje się zawieszać podczas operacji indeksowania po zapisaniu pliku indeksu o rozmiarze około 16 GB.Lucene.net - Awarie podczas indeksowania

Zapis śladu stosu zapisany na konsoli jest powtarzany trzy razy z przyczyn, których nie znam. Dla zwięzłości dostarczyłem tylko tę pojedynczą część, która się powtarza. Oto ślad stosu jako zapisywane na conolse przez Lucene:

Lucene.Net.Index.MergePolicy+MergeException: Exception of type 'Lucene.Net.Index.MergePolicy+MergeException' was thrown. ---> 

System.IO.FileNotFoundException: Could not find file 'PATH_TO_MY_INDEX_DIRECTORY\_xx.cfs'. 

File name: 'PATH_TO_MY_INDEX_DIRECTORY\_xx.cfs' 
at Lucene.Net.Index.IndexWriter.HandleMergeException(Exception t, OneMerge merge) 
at Lucene.Net.Index.IndexWriter.Merge(OneMerge merge) 
at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run() 
--- End of inner exception stack trace --- 
at Lucene.Net.Index.ConcurrentMergeScheduler.HandleMergeException(Exception exc) 
at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run() 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
at System.Threading.ThreadHelper.ThreadStart() 

Kiedy otworzyć wygenerowany log z wersji Java Łukasza indeks jest usunięty (prawdopodobnie dlatego, że jest uszkodzony, „write.lock” plik pozostaje, na przykład), choć może to być błąd lub błędna konfiguracja Luke'a.

Utworzenie tego indeksu trwa około 36 godzin i nie chcę go ponownie robić po raz trzeci (to nie pierwszy raz, kiedy to się stało).

Nie mam pojęcia, co to powoduje. Co mogę zrobić?

Używam Lucene.net 2.9.2 ponieważ jest to ostatnia wersja, która została zbudowana dla .NET 3.5.

+0

indeksujesz na dysku lokalnym? –

+0

Tak, jest to dysk lokalny. Nie ma innych procesów korzystających z plików indeksu, a mój program indeksujący ma pojedynczą instancję IndexWriter. – Dai

+0

możliwą przyczyną tego w Lucne Java jest to, że zabraknie uchwytów plików, nie jestem pewien, czy ma to zastosowanie do Lucene.net. –

Odpowiedz

3

Uświadomiłem sobie, że było to spowodowane zbytnim pisaniem indeksu bez wywoływania Commit. Zmodyfikowałem swój kod, aby zadzwonić pod numer Commit po zapisaniu około 10 MB danych. Od tego czasu nie miałem wyjątku - a kiedy się zawiesza, oznacza to, że nie muszę odbudowywać całego 36GB indeksu, tylko ostatnie 10 MB.

1

Zajęło trochę czasu, aby znaleźć, ale okazało się (w moim przypadku) być spowodowane przez lokalny dysk twardy jest pełny. Przydałby się przydatniejszy komunikat o wyjątku.