2012-03-29 23 views
11

Máy chủ của tôi bị mất nguồn và chỉ mục lucene bị hỏng. Tôi đã chạy IndexChecker nhưng không thành công:Làm thế nào để sửa chữa chỉ số Lucene bị hỏng?

java -cp /home/dthoai/programs/paesia/checker/lucene-core-3.5.0.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /mnt/peda/paesia/index -fix 


Opening index @ /mnt/peda/paesia/index 

ERROR: could not read any segments file in directory 
java.io.IOException: read past EOF: MMapIndexInput(path="/mnt/peda/paesia/index/segments_ls0l") 
at org.apache.lucene.store.MMapDirectory$MMapIndexInput.readByte(MMapDirectory.java:279) 
at org.apache.lucene.store.ChecksumIndexInput.readByte(ChecksumIndexInput.java:41) 
at org.apache.lucene.store.DataInput.readInt(DataInput.java:84) 
at org.apache.lucene.store.DataInput.readLong(DataInput.java:126) 
at org.apache.lucene.index.SegmentInfo.<init>(SegmentInfo.java:202) 
at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:286) 
at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:363) 
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:754) 
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:593) 
at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:359) 
at org.apache.lucene.index.CheckIndex.checkIndex(CheckIndex.java:327) 
at org.apache.lucene.index.CheckIndex.main(CheckIndex.java:1007) 

Làm cách nào tôi có thể sửa chỉ mục lucene của mình?

+0

Xây dựng lại không phải là một tùy chọn? – Reactormonk

+0

bạn đã thử mở chỉ mục trong Luke chưa? http://www.getopt.org/luke/ – Mikos

Trả lời

8

Dường như tệp danh bạ chính, segments_N bị hỏng. Điều này có thể có nghĩa là mất điện xảy ra trong khi một cam kết đang chạy.

Nếu trường hợp này xảy ra, điều này có nghĩa là có một số khả năng tệp cũ hơn nằm trong thư mục của bạn và các phân đoạn được tham chiếu vẫn còn hiện diện và hợp lệ. Nếu có một tập tin như vậy, hãy cố gắng loại bỏ hỏng segments_ls0l tập tin của bạn và xem:

  • liệu Lucene quản lý để mở index,
  • những dữ liệu bạn đang thiếu.

Nếu không, có một số chủ đề trong danh sách gửi thư của người dùng Lucene nói về việc tạo lại tệp segment_N.

Hãy chắc chắn để sao lưu thư mục của bạn trước khi thực hiện bất kỳ sửa đổi.

+0

cảm ơn bạn đã trả lời! Tôi chỉ có cùng một vấn đề và tôi đã xóa tất cả các phân đoạn bị hỏng có kích thước 0 byte. Bây giờ mọi thứ có vẻ ổn. Nỗi lo của tôi là việc loại bỏ những tệp segmens_N đó an toàn mặc dù chúng chỉ là 0 tệp byte? – bbnn

+0

Tôi đã giải quyết được vấn đề như thế này; Dừng ES. Nhập phân đoạn bị hỏng '/ var/lib/elasticsearch/elasticsearch/nodes/0/index///index'. Tìm tất cả các tệp rỗng 'ls -l -S | sắp xếp -k 5 -n | head' và loại bỏ chúng. Bắt đầu lại ES. – Oleander

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