2012-06-13 15 views
15

Sto appena iniziando con elasticsearch. Il nostro requisito ci obbliga a indicizzare migliaia di file PDF e sto avendo difficoltà a trovare solo UNO di essi per indicizzare correttamente.Elasticsearch Parse Errore di eccezione durante il tentativo di indicizzare PDF

Installato il plug-in Attachment Type e ottenuto risposta: .

Seguito il Attachment Type in Action tutorial ma il processo si blocca e Non so come interpretare il messaggio di errore. Ho provato anche lo gist che si blocca nello stesso posto.

$ 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} 

Maggiori dettagli:

Il json.file contiene un file PDF incorporato Base64 (come da istruzioni). La prima riga del file appare corretta (per me comunque): {"file":"JVBERi0xLjQNJeLjz9MNCjE1OCAwIG9iaiA8 ...

non sono sicuro se forse la json.file non è valido o se forse elasticsearch semplicemente non è impostato per analizzare i file PDF in modo corretto? !?

Encoding - Ecco come stiamo codifica il PDF in json.file (come da tutorial):

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

anche provato:

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) 

Spero che qualcuno possa aiutarmi a vedere cosa mi manca o che ho sbagliato?

risposta

19

Il seguente errore indica l'origine del problema.

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

UTF-8 codici [106, 115, 111, ...] mostrano che si sta cercando di stringa indice "json.file" invece del contenuto del file.

Per indicizzare il contenuto del file è sufficiente aggiungere la lettera "@" davanti al nome del file.

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

Ah, hai ragione! Grazie per l'aiuto! Ma, ora ho provato ad aggiungere il '@' davanti al nome del file e si blocca semplicemente senza output sul log?!? Ho bisogno di * ctrl-C * per riavere il mio guscio. Qualche idea? Forse un modo per rendere più utile il registro? – Meltemi

+0

Potrebbe eseguire jstack e vedere dove si blocca? – imotov

+0

Ho avuto lo stesso errore. Grazie! – ssoto

3

Risulta è necessario export ES_JAVA_OPTS=-Djava.awt.headless=true prima di eseguire un'applicazione Java su un server 'senza testa' ... che would'a pensato!?!

+1

vale la pena notare che questo non fa che tacitare l'errore. @ risposta di imotov è probabilmente la risposta corretta per questo problema. Un altro motivo per cui viene visualizzato l'errore "Impossibile derivare xcontent'" è quando un carico utile vuoto viene passato in elastico. – tester

Problemi correlati