2012-08-22 38 views
7

Trình lập chỉ mục của tôi, sử dụng Lucene, dường như bị lỗi trong quá trình lập chỉ mục sau khi ghi một tệp chỉ mục có kích thước khoảng 16GB.Lucene.net - Sự cố khi lập chỉ mục

Dấu vết ngăn xếp được ghi vào bảng điều khiển được lặp lại ba lần vì lý do tôi không biết. Trong ngắn gọn, tôi chỉ cung cấp một phần duy nhất được lặp lại. Dưới đây là stack trace như ghi vào conolse bởi 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() 

Khi tôi mở nhật ký được tạo ra với phiên bản Java của Luke chỉ số này sẽ bị xóa (có lẽ vì nó bị hỏng, các "write.lock" tập tin vẫn còn, ví dụ), mặc dù đây có thể là lỗi hoặc cấu hình sai của Luke.

Tạo chỉ mục này mất khoảng 36 giờ và tôi không muốn phải thực hiện lại lần thứ ba (đây không phải là lần đầu tiên điều này xảy ra).

Tôi không biết điều gì gây ra điều này. Tôi có thể làm gì?

Tôi đang sử dụng Lucene.net 2.9.2 vì đây là phiên bản cuối cùng được tạo cho .NET 3.5.

+0

bạn có đang lập chỉ mục cho một ổ đĩa cục bộ không? –

+0

Vâng, đó là một ổ đĩa địa phương. Không có quy trình nào khác sử dụng các tệp chỉ mục hoặc chương trình lập chỉ mục của tôi có một cá thể IndexWriter duy nhất. – Dai

+0

một lý do có thể cho điều này trong java lucene là bạn chạy ra khỏi tập tin xử lý, tôi không chắc chắn nó áp dụng cho Lucene.net tho –

Trả lời

3

Tôi nhận ra rằng điều này là do viết quá nhiều chỉ mục mà không cần gọi số Commit. Tôi đã sửa đổi mã của mình để gọi Commit sau khi viết khoảng 10MB dữ liệu. Tôi đã không có ngoại lệ kể từ khi - và khi nó sụp đổ nó có nghĩa là tôi không cần phải xây dựng lại toàn bộ chỉ số 36GB, chỉ 10MB cuối cùng.

1

Mất một lúc để tìm, nhưng điều này hóa ra (trong trường hợp của tôi) là do ổ cứng cục bộ đầy. Một thông báo ngoại lệ hữu ích hơn sẽ hữu ích.

Các vấn đề liên quan