2011-01-18 30 views
5

Xin lỗi vì câu hỏi đơn giản, nhưng dường như không có cách nào rõ ràng. Theo tài liệu, bạn nên giữ một ví dụ đơn lẻ là IndexWriter trong bộ nhớ có thể được sử dụng lặp đi lặp lại để cập nhật, thay vì mở và đóng một cho mỗi thay đổi (điều này tốn kém hơn nhiều).Làm thế nào tôi có thể kiểm tra xem một dụ Lucene IndexWriter là hợp lệ/mở?

Tuy nhiên, tài liệu cũng nêu rõ rằng IndexWriter sẽ bị đóng nếu có ngoại lệ xảy ra (ví dụ: OutOfMemoryException).

Vì vậy, tôi cần một số cách để kiểm tra xem phiên bản IndexWriter của tôi có hợp lệ hay không, giả sử nó có thể bị đóng bởi một số thao tác khác.

Tôi nhận ra mình sẽ bị ngoại lệ nếu tôi cố gắng sử dụng khi nó đóng, nhưng thay vì thất bại, tôi muốn kiểm tra xem tôi có cần tạo IndexWriter mới trước khi tôi cần nó để không xảy ra lỗi.

Dường như đối với tôi một thuộc tính/phương pháp đơn giản là IsOpen sẽ là một bổ sung rõ ràng.

Suy nghĩ:

Tôi giả sử rằng nếu tôi có thể đảm bảo rằng lớp học của tôi là điều duy nhất có khả năng đóng IndexWriter, tôi chỉ đơn giản có thể thiết lập nó để null khi nó được đóng lại và chỉ cần kiểm tra để chắc chắn rằng nó không phải null bất cứ khi nào tôi sử dụng nó, tuy nhiên điều này sẽ không xử lý các trường hợp trong đó IndexWriter đóng cửa chính nó (nếu trường hợp đó có thể xảy ra ngay bây giờ hoặc trong tương lai).

Một ý nghĩ khác là tôi có thể quấn một nỗ lực để sử dụng nó trong khối try/catch và sử dụng ngoại lệ để cho biết rằng nó cần phải được mở cửa trở lại, nhưng điều này không có vẻ rất hiệu quả/thanh lịch. Tôi sẽ sử dụng phương pháp nào để kiểm tra tính hợp lệ của IndexWriter?

Trả lời

3

Nếu bạn gặp ngoại lệ bộ nhớ (hoặc bất kỳ loại ngoại lệ nào), đó có thể là một vấn đề lớn. Những thay đổi bạn đang cố gắng viết có thể sẽ không được viết và chỉ mục của bạn thậm chí có thể bị hỏng, tùy thuộc vào thời điểm/cách ngoại lệ xảy ra.

Vì vậy, IndexWriter đang ở trạng thái bị lỗi là trường hợp ngoại lệ và tôi có thể nói chắc chắn rằng nó sẽ sử dụng ngoại lệ, tức là thử/bắt.

(Tôi không nghĩ rằng bắt của bạn sẽ được "mở lại các nhà văn." Tùy thuộc vào ngoại lệ, bạn có thể cần phải reindex công cụ, có thể từ đầu. Chắc chắn bạn không nên mong đợi để có được trường hợp ngoại lệ trong nhà văn của bạn như là một thường xuyên xảy ra.)

1

Tôi giả sử IndexWriter sẽ ném một số AlreadyClosedException (xem ensureOpen), nếu nó bị đóng khi truy cập. Vì vậy, bạn có thể xử lý điều đó trong trường hợp IndexWriter không phải là null.

HTH

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