2012-08-22 7 views
7

Mi indexador, usando Lucene, parece bloquearse durante las operaciones de indexación después de escribir un archivo de índice de aproximadamente 16 GB de tamaño.Lucene.net - Bloqueos durante la indexación

El rastro de pila escrito en la consola se repite tres veces por razones que desconozco. Por brevedad solo he suministrado la parte única que se repite. Aquí está el seguimiento de la pila como se escribe en el conolse por 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() 

Al abrir el registro generado con la edición de Java de Lucas se borra el índice (presumiblemente porque está dañado, el archivo "write.lock" sigue siendo, por ejemplo), aunque esto podría ser un error o una mala configuración de Luke.

La creación de este índice dura aproximadamente 36 horas y no estoy dispuesto a tener que volver a hacerlo por tercera vez (esta no es la primera vez que ocurre).

No tengo idea de qué está causando esto. ¿Que puedo hacer?

Estoy usando Lucene.net 2.9.2 porque es la última versión que se creó para .NET 3.5.

+0

¿Está indizando a un disco local? –

+0

Sí, es un disco local. No hay otros procesos que usen los archivos de índice, y mi programa de indexación tiene una sola instancia de IndexWriter. – Dai

+0

una posible razón para esto en lucene java es que te quedas sin controladores de archivo, no estoy seguro de que se aplique a Lucene.net aunque –

Respuesta

3

Me di cuenta de que esto fue causado por escribir demasiado en el índice sin llamar al Commit. Modifiqué mi código para llamar al Commit después de escribir aproximadamente 10MB de datos. No he tenido la excepción desde entonces, y cuando se bloquea, significa que no necesito reconstruir todo el índice de 36GB, solo los últimos 10MB.

1

Me tomó un tiempo encontrarlo, pero resultó ser (en mi caso) causado por el disco duro local lleno. Un mensaje de excepción más útil habría sido útil.