2015-10-26 5 views
5

मैं एक जेएसओएन फ़ाइल को एक नए एलैस्टिकसेच इंडेक्स में थोक सूचकांक करने की कोशिश कर रहा हूं और ऐसा करने में असमर्थ हूं। जब मैं मानक थोक सूचकांक एपीआई Elasticsearch से मैं यह त्रुटि त्रुटि मिलती है इस्तेमाल करने की कोशिश मैं JSONलोचदार खोज थोक सूचकांक JSON डेटा

[{"Amount": "480", "Quantity": "2", "Id": "975463711", "Client_Store_sk": "1109"}, 
{"Amount": "2105", "Quantity": "2", "Id": "975463943", "Client_Store_sk": "1109"}, 
{"Amount": "2107", "Quantity": "3", "Id": "974920111", "Client_Store_sk": "1109"}, 
{"Amount": "2115", "Quantity": "2", "Id": "975463798", "Client_Store_sk": "1109"}, 
{"Amount": "2116", "Quantity": "1", "Id": "975463827", "Client_Store_sk": "1109"}, 
{"Amount": "648", "Quantity": "3", "Id": "975464139", "Client_Store_sk": "1109"}, 
{"Amount": "2126", "Quantity": "2", "Id": "975464805", "Client_Store_sk": "1109"}, 
{"Amount": "2133", "Quantity": "1", "Id": "975464061", "Client_Store_sk": "1109"}, 
{"Amount": "1339", "Quantity": "4", "Id": "974919458", "Client_Store_sk": "1109"}, 
{"Amount": "1196", "Quantity": "5", "Id": "974920538", "Client_Store_sk": "1109"}, 
{"Amount": "1198", "Quantity": "4", "Id": "975463638", "Client_Store_sk": "1109"}, 
{"Amount": "1345", "Quantity": "4", "Id": "974919522", "Client_Store_sk": "1109"}, 
{"Amount": "1347", "Quantity": "2", "Id": "974919563", "Client_Store_sk": "1109"}, 
{"Amount": "673", "Quantity": "2", "Id": "975464359", "Client_Store_sk": "1109"}, 
{"Amount": "2153", "Quantity": "1", "Id": "975464511", "Client_Store_sk": "1109"}, 
{"Amount": "3896", "Quantity": "4", "Id": "977289342", "Client_Store_sk": "1109"}, 
{"Amount": "3897", "Quantity": "4", "Id": "974920602", "Client_Store_sk": "1109"}] 

अंदर निम्न नमूना डेटा है: { "message": "ActionRequestValidationException [मान्यकरण असफल: 1: कोई अनुरोध जोड़ा गया;] "}

क्या कोई इस प्रकार के JSON को अनुक्रमणित करने में सहायता कर सकता है?

+0

तुम मुझे सूचकांक अनुरोध बता सकते हैं आप –

+0

@ कुमर कैलाश का उपयोग कर रहे हैं curl -XPOST लोकलहोस्ट का अनुरोध है: 9200/index_local/my_doc_type/_bulk --data-binary --data @/home/data1.json –

उत्तर

9

आपको जेएसओएन फ़ाइल को पढ़ने और फिर _bulk endpoint द्वारा अपेक्षित स्वरूप के साथ थोक अनुरोध का निर्माण करना है, यानी आदेश के लिए एक पंक्ति और दस्तावेज़ के लिए एक पंक्ति, एक न्यूलाइन चरित्र से अलग है ... कुल्ला और प्रत्येक दस्तावेज़ के लिए दोहराएँ:

curl -XPOST localhost:9200/your_index/_bulk -d ' 
{"index": {"_index": "your_index", "_type": "your_type", "_id": "975463711"}} 
{"Amount": "480", "Quantity": "2", "Id": "975463711", "Client_Store_sk": "1109"} 
{"index": {"_index": "your_index", "_type": "your_type", "_id": "975463943"}} 
{"Amount": "2105", "Quantity": "2", "Id": "975463943", "Client_Store_sk": "1109"} 
... etc for all your documents 
' 

बस वास्तविक सूचकांक और प्रकार के नाम का उपयोग कर रहे साथ your_index और your_type बदलना सुनिश्चित करें।

अद्यतन

ध्यान दें कि आदेश-पंक्ति, छोटा किया जा सकता _index और _type को हटाने अगर उन अपने URL में निर्दिष्ट कर रहे हैं के द्वारा। _id को निकालना भी संभव है यदि आप अपने मैपिंग में path to your id field निर्दिष्ट करते हैं (ध्यान दें कि यह सुविधा ES 2.0 में बहिष्कृत की जाएगी)। कम से कम, अपने आदेश पंक्ति सभी दस्तावेजों के लिए {"index":{}} की तरह लग सकता है लेकिन यह हमेशा क्रम में आपरेशन आप किस प्रकार की

अद्यतन (इस मामले index दस्तावेज़ में) निष्पादित करना चाहते हैं निर्दिष्ट करने के लिए अनिवार्य हो जाएगा 2

curl -XPOST localhost:9200/index_local/my_doc_type/_bulk --data-binary @/home/data1.json 

/home/data1.json इस तरह दिखना चाहिए:

{"index":{}} 
{"Amount": "480", "Quantity": "2", "Id": "975463711", "Client_Store_sk": "1109"} 
{"index":{}} 
{"Amount": "2105", "Quantity": "2", "Id": "975463943", "Client_Store_sk": "1109"} 
{"index":{}} 
{"Amount": "2107", "Quantity": "3", "Id": "974920111", "Client_Store_sk": "1109"} 
+0

मुझे आपके द्वारा वर्णित प्रारूप मिलता है, लेकिन मैं पूछना चाहता था अगर मैं एक कामकाज कर सकता हूं ताकि मुझे इस {"इंडेक्स": {"_index": "your_index", "_type": "your_type", "_id": "975463711"}} के बाद कुछ निर्दिष्ट करने की आवश्यकता नहीं है जेसन में दस्तावेज़? –

+0

प्रत्येक दस्तावेज़ के लिए कमांड लाइन हमेशा अनिवार्य है। यदि आप इंडेक्स जोड़ते हैं और अपने यूआरएल में नाम टाइप करते हैं (यानी 'लोकलहोस्ट: 9200/your_index/your_type/_bulk'), तो आप इसे कम करने के लिए कमांड लाइन से '_index' और' _type' को हटा सकते हैं। '_id' निर्दिष्ट करने का कोई तरीका भी नहीं है लेकिन कम से कम, आपको हमेशा यह निर्दिष्ट करना होगा कि आप दस्तावेज़ के साथ कौन सा ऑपरेशन करना चाहते हैं, यानी आप जितना छोटा कर सकते हैं वह '{" अनुक्रमणिका "है: {} } ' – Val

+0

तो अनुरोध curl -XPOST लोकलहोस्ट: 9200/index_local/my_doc_type/_bulk --data-binary --data @/home/data1.json जहां मैंने अनुरोध में इंडेक्स और doc_type निर्दिष्ट किया है, मेरे जेसन डेटा को चाहिए ऐसे दिखते हैं?[{"अनुक्रमणिका": {}} {"राशि": "480", "मात्रा": "2", "आईडी": "975463711", "क्लाइंट_स्टोर_स्क": "110 9"}, {"अनुक्रमणिका": {}} {"राशि": "2105", "मात्रा": "2", "आईडी": "975463943", "क्लाइंट_स्टोर_स्क": "110 9"}, {"अनुक्रमणिका": {}} {" राशि ":" 2107 "," मात्रा ":" 3 "," आईडी ":" 974920111 "," क्लाइंट_स्टोर_स्क ":" 110 9 "} ] –

2

आज के रूप में, 6.1.2 ElasticSearch के नवीनतम संस्करण, और कर्ल आदेश है जो Windows (64) पर मेरे लिए काम करता

curl -s -XPOST localhost:9200/my_index/my_index_type/_bulk -H "Content-Type: 
application/x-ndjson" --data-binary @D:\data\mydata.json 

डेटा कि mydata.json में उपस्थित होना चाहिए के प्रारूप के रूप में @ वैल के जवाब में दिखाया गया है एक ही रहता है

संबंधित मुद्दे