2012-06-13 30 views
15

Sadece elasticsearch ile çalışmaya başladım. İhtiyacımız olan binlerce PDF dosyasını dizine eklememize gerek duyuyor ve sadece bir tanesini başarılı bir şekilde indekslemek için zor bir zaman geçiriyorum.Elasticsearch Parse PDF'yi endekslemeye çalışırken istisna hatası

Eklenti Türü eklentisini yükledi ve yanıt alındı: Installed mapper-attachments.

Attachment Type in Action tutorial izlenir, ancak işlem askıda kalıyor ve Hata iletisini nasıl yorumlayacağımı bilmiyorum. Aynı yerde asılı kalan gist'u da denedi.

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

Diğer ayrıntılar:

json.file (talimatlara göre) gömülü Base64 PDF dosyasını içerir. dosyanın ilk satırı (bana zaten) doğru görünür: {"file":"JVBERi0xLjQNJeLjz9MNCjE1OCAwIG9iaiA8 ...

belki json.file geçersiz ya da belki elasticsearch eğer sadece düzgün PDF'leri ayrıştırmak için ayarlanmamış olup olmadığından emin değilim? !?

Kodlama - İşte (öğretici göre) json.file içine PDF kodlayan ediyoruz edebilirsiniz: ayrıca denenmiş

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

:

coded=`openssl base64 -in fn6742.pdf 

günlüğü:

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

Birini umursamıyorum neyi kaçırdığımı veya yanlış yaptığımı görmeme yardım edebilir mi?

cevap

19

Aşağıdaki hata, sorunun kaynağını işaret eder.

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

UTF-8 kodları [106, 115, 111, ...] Dizin dizesi "json.file" yerine dosyanın içeriğine çalışıyoruz olduğunu göstermektedir.

Dosyanın içeriğini dizine eklemek için dosya adının önüne "@" harfi eklemeniz yeterlidir.

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

Ah, siz haklısınız! Yardım ettiğin için teşekkür ederim! Ama şimdi '' 'dosya ismini önüne eklemeyi denedim ve günlüğüne hiçbir çıkış yapmadan mı kalıyor? Kabuğumu geri almak için * ctrl-C * 'ye ihtiyacım var. Herhangi bir fikir? Belki günlükleri daha faydalı hale getirmenin bir yolu olabilir mi? – Meltemi

+0

jstack'i çalıştırabilir ve nerede kilitlendiğini görebilir misiniz? – imotov

+0

Aynı hatayı aldım. Teşekkür ederim! – ssoto

3

o düşünce would'a bir 'başsız' sunucuda ... bir java uygulaması çalıştırmadan önce export ES_JAVA_OPTS=-Djava.awt.headless=true gerekli olduğu da ortaya çıktı!?!

+1

, bunun yalnızca hatayı susturduğuna dikkat çekiyor. @ imotov'un cevabı muhtemelen bu problem için doğru cevaptır. Boş bir yükün elastikliğe geçtiğinde '' xcontent türetemedi '' hatasının bir başka nedeni de ortaya çıkacaktır. – tester