2012-06-13 18 views
15

Estoy empezando con elasticsearch. Nuestro requisito nos obliga a indexar miles de archivos PDF y me está costando conseguir UNO de ellos para indexar con éxito.Elasticsearch Parse Error de excepción al intentar indexar PDF

Instaló el complemento Tipo de datos adjuntos y obtuvo la respuesta: Installed mapper-attachments.

Seguí el Attachment Type in Action tutorial pero el proceso se bloquea y No sé cómo interpretar el mensaje de error. También probé el gist que cuelga en el mismo lugar.

$ curl -X POST "localhost:9200/test/attachment/" -d json.file 
{"error":"ElasticSearchParseException[Failed to derive xcontent from (offset=0, length=9): [106, 115, 111, 110, 46, 102, 105, 108, 101]]","status":400} 

Más detalles:

El json.file contiene un archivo PDF incrustado base 64 (según las instrucciones). La primera línea del archivo aparece correcta (para mí de todos modos): {"file":"JVBERi0xLjQNJeLjz9MNCjE1OCAwIG9iaiA8 ...

no estoy seguro de si tal vez el json.file es válida o si tal vez Elasticsearch simplemente no está configurado para analizar archivos PDF correctamente? !

Codificación - Así es como estamos que codifica el PDF en json.file (según tutorial):

coded=`cat fn6742.pdf | perl -MMIME::Base64 -ne 'print encode_base64($_)'` 
json="{\"file\":\"${coded}\"}" 
echo "$json" > json.file 

también trató:

coded=`openssl base64 -in fn6742.pdf 

registro:

[2012-06-07 12:32:16,742][DEBUG][action.index    ] [Bailey, Paul] [test][0], node[AHLHFKBWSsuPnTIRVhNcuw], [P], s[STARTED]: Failed to execute [index {[test][attachment][DauMB-vtTIaYGyKD4P8Y_w], source[json.file]}] 
org.elasticsearch.ElasticSearchParseException: Failed to derive xcontent from (offset=0, length=9): [106, 115, 111, 110, 46, 102, 105, 108, 101] 
    at org.elasticsearch.common.xcontent.XContentFactory.xContent(XContentFactory.java:147) 
    at org.elasticsearch.common.xcontent.XContentHelper.createParser(XContentHelper.java:50) 
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:451) 
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:437) 
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareCreate(InternalIndexShard.java:290) 
    at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:210) 
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:532) 
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:430) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:680) 

¿Esperar que alguien me ayude a ver lo que me estoy perdiendo o lo que hice mal?

Respuesta

19

El siguiente error apunta al origen del problema.

Failed to derive xcontent from (offset=0, length=9): [106, 115, 111, 110, 46, 102, 105, 108, 101] 

El UTF-8 códigos [106, 115, 111, ...] muestran que usted está tratando de cadena de índice "json.file" en lugar del contenido del archivo.

Para indexar el contenido del archivo, simplemente agregue la letra "@" delante del nombre del archivo.

curl -X POST "localhost:9200/test/attachment/" -d @json.file 
+0

¡Ah, estás en lo correcto! ¡Gracias por tu ayuda! Pero, ahora he intentado agregar el '@' delante del nombre de archivo y simplemente cuelga sin salida en el registro?!? Necesito * ctrl-C * para recuperar mi caparazón. ¿Algunas ideas? ¿Tal vez una forma de hacer que log sea más útil? – Meltemi

+0

¿Podría ejecutar jstack y ver dónde se cuelga? – imotov

+0

Tuve el mismo error. ¡Gracias! – ssoto

3

resulta que es necesario export ES_JAVA_OPTS=-Djava.awt.headless=true antes de ejecutar una aplicación de java en el servidor 'sin cabeza' ... que pensó would'a!?!

+1

vale la pena señalar que esto solo silencia el error. La respuesta de @imotov es probablemente la respuesta correcta para este problema. Otro motivo por el que aparece el error "Falló para derivar xcontenido" es cuando una carga útil vacía pasa al elástico. – tester

Cuestiones relacionadas