2012-03-29 23 views
11

Mi servidor sufría pérdida de energía y el índice de lucene estaba dañado. Ejecuté IndexChecker pero falló:¿Cómo reparar el índice lucene dañado?

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) 

¿Cómo puedo reparar mi índice de lucene?

+0

¿Reconstruir no es una opción? – Reactormonk

+0

¿Has intentado abrir el índice en Luke? http://www.getopt.org/luke/ – Mikos

Respuesta

8

Parece que el archivo de directorio principal, segments_N está dañado. Esto probablemente significa que la pérdida de energía ocurrió mientras se ejecutaba una confirmación.

Si este es el caso, esto significa que existe la posibilidad de que exista un archivo viejo de los segmentos_N en su directorio, y que los segmentos a los que se hace referencia sigan presentes y sean válidos. Si hay un archivo de este tipo, intente quitar su segments_ls0l archivo dañado y ver:

  • si Lucene se las arregla para abrir el índice,
  • qué datos se echa en falta.

De lo contrario, hay algunos hilos de una lista de correo de usuario de Lucene que habla sobre la regeneración del archivo de los segment_N.

Asegúrese de hacer copias de seguridad de su directorio antes de realizar ninguna modificación.

+0

¡gracias por su respuesta! Solo tuve el mismo problema, y ​​eliminé todos los segmentos corruptos que tenían 0 bytes de tamaño. Ahora todo parece estar bien. Mi preocupación es que era seguro eliminar esos archivos segmens_N aunque solo eran archivos de 0 bytes. – bbnn

+0

He resuelto el problema de esta manera; Detener ES. Introduzca el fragmento dañado '/ var/lib/elasticsearch/elasticsearch/nodes/0/index///index'. Encuentra todos los archivos vacíos 'ls -l -S | ordenar -k 5 -n | cabeza' y eliminarlos. Comience ES de nuevo. – Oleander

Cuestiones relacionadas