2012-06-13 28 views
15

इंडेक्स करने का प्रयास करते समय Elasticsearch Parse अपवाद त्रुटि मैं elasticsearch के साथ शुरू कर रहा हूँ। हमारी आवश्यकता के लिए हमें हजारों पीडीएफ फाइलों को अनुक्रमणित करने की आवश्यकता है और मुझे सफलतापूर्वक इंडेक्स करने के लिए उनमें से केवल एक प्राप्त करने में कठिनाई हो रही है।इंडेक्स पीडीएफ

अटैचमेंट प्रकार प्लगइन स्थापित किया गया और प्रतिक्रिया मिली: Installed mapper-attachments

Attachment Type in Action tutorial का पालन किया लेकिन प्रक्रिया लटकती है और मुझे नहीं पता कि त्रुटि संदेश की व्याख्या कैसे करें। gist भी कोशिश की जो एक ही स्थान पर लटका हुआ है।

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

अधिक विवरण:

json.file एक एम्बेडेड Base64 पीडीएफ फाइल (निर्देशों के अनुसार) शामिल हैं। फ़ाइल की पहली पंक्ति सही प्रतीत होता है (मेरे लिए वैसे भी): {"file":"JVBERi0xLjQNJeLjz9MNCjE1OCAwIG9iaiA8 ...

मुझे यकीन है कि अगर शायद json.file अवैध या अगर शायद elasticsearch सिर्फ पीडीएफ़ ठीक से पार्स करने के लिए सेट नहीं है है नहीं कर रहा हूँ? !?

एन्कोडिंग - यहाँ हम कैसे json.file में पीडीएफ एन्कोडिंग रहे हैं (प्रति ट्यूटोरियल के रूप में) है:

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

भी करने की कोशिश की:

coded=`openssl base64 -in fn6742.pdf 

लॉग:

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

किसी की उम्मीद है कि मुझे यह देखने में मदद मिल सकती है कि मैं क्या खो रहा हूं या गलत किया?

उत्तर

19

निम्न त्रुटि समस्या के स्रोत को इंगित करती है।

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

UTF-8 कोड [106, 115, 111, ...] दिखाते हैं कि आप सूचकांक स्ट्रिंग "json.file" के बजाय फ़ाइल की सामग्री की कोशिश कर रहे हैं।

फ़ाइल की सामग्री इंडेक्स करने के लिए फ़ाइल नाम के सामने बस "@" अक्षर जोड़ें।

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

आह, आप सही हैं! आपकी सहायताके लिए धन्यवाद! लेकिन, अब मैंने फ़ाइल नाम के सामने '@' जोड़ने का प्रयास किया है और यह सिर्फ लॉग आउटपुट के साथ लटकता है?! मुझे अपना खोल वापस पाने के लिए * ctrl-c * की आवश्यकता है। कोई विचार? शायद लॉग को और अधिक सहायक बनाने का एक तरीका? – Meltemi

+0

क्या आप jstack चला सकते हैं और देख सकते हैं कि यह कहां लटका है? – imotov

+0

मुझे भी यही गलती थी। धन्यवाद! – ssoto

3

बाहर कर देता है यह एक 'हेडलेस' सर्वर ... जो सोचा would'a पर एक जावा अनुप्रयोग को चलाने से पहले export ES_JAVA_OPTS=-Djava.awt.headless=true करने के लिए आवश्यक है!?!

+1

यह ध्यान देने योग्य है कि यह केवल त्रुटि को शांत करता है। @ imotov का जवाब शायद इस समस्या के लिए सही जवाब है। 'Xcontent' त्रुटि प्राप्त करने में विफल होने का एक और कारण पॉप अप होगा जब खाली पेलोड लोचदार में पारित किया जाएगा। – tester