2012-06-13 5 views
15

Ich beginne gerade mit elasticsearch. Unsere Anforderung besteht darin, dass wir Tausende von PDF-Dateien indexieren müssen, und es fällt mir schwer, nur EINE von ihnen zum erfolgreichen Indexieren zu erhalten.Elasticsearch Parse Ausnahmefehler beim Versuch, PDF zu indexieren

Installierte das Attachment Type Plugin und bekam Antwort: Installed mapper-attachments.

Gefolgt der Attachment Type in Action tutorial aber der Prozess hängt und Ich weiß nicht, wie die Fehlermeldung zu interpretieren. Probieren Sie auch die gist, die an der gleichen Stelle hängt.

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

Weitere Details:

Die json.file enthält eine eingebettete Base64 PDF-Datei (gemäß Anweisungen). Die erste Zeile der Datei erscheint korrekt ist (für mich jedenfalls): {"file":"JVBERi0xLjQNJeLjz9MNCjE1OCAwIG9iaiA8 ...

Ich bin mir nicht sicher, ob vielleicht die json.file ungültig ist oder vielleicht, wenn Elasticsearch ist einfach nicht eingerichtet PDFs richtig zu analysieren? !?

Encoding - Hier ist, wie wir die PDF in json.file sind kodiert (per Tutorial):

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

auch versucht:

coded=`openssl base64 -in fn6742.pdf 

log:

[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) 

Hoffe jemand kann mir helfen zu sehen, was ich vermisse oder falsch gemacht habe?

Antwort

19

Der folgende Fehler weist auf die Ursache des Problems hin.

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

Die UTF-8-Codes [106, 115, 111, ...] zeigen, dass Sie indizieren string "json.file" statt Inhalt der Datei versuchen.

Um den Inhalt der Datei zu indexieren, fügen Sie einfach den Buchstaben "@" vor dem Dateinamen ein.

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

Ah, Sie haben Recht! Danke für Ihre Hilfe! Aber, jetzt habe ich versucht, das '@' vor dem Dateinamen hinzuzufügen und es hängt nur ohne Ausgabe an das Protokoll?!? Ich muss * Ctrl-C * um meine Shell zurück zu bekommen. Irgendwelche Ideen? Vielleicht eine Möglichkeit, Log hilfreicher zu machen? – Meltemi

+0

Können Sie Jstack ausführen und sehen, wo es hängt? – imotov

+0

Ich hatte den gleichen Fehler. Vielen Dank! – ssoto

3

Stellt sich heraus, es zu export ES_JAVA_OPTS=-Djava.awt.headless=true notwendig ist, bevor Sie eine Java-Anwendung auf einem 'Headless' Server läuft ... wer dachte would'a!?!

+1

ist es erwähnenswert, dass dies nur den Fehler zum Schweigen bringt. @ imotov's Antwort ist wahrscheinlich die richtige Antwort für dieses Problem. Ein weiterer Grund für den Fehler 'Fehler beim Ableiten von xcontent' tritt auf, wenn eine leere Nutzlast in die Elastic-Klasse übergeben wird. – tester

Verwandte Themen