2015-10-26 26 views
5

JSON dosyasını yeni bir Elasticsearch dizinine toplu olarak dizinlemeye çalışıyorum ve bunu yapamıyorum. Ben bu hatayı hatası alıyorum Elasticsearch standart dökme endeks api kullanmaya çalıştığınızda JSONElasticsearch Toplu Dizin JSON Verisi

[{"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"}] 

içine aşağıdaki örnek veriler var: { "mesaj": "ActionRequestValidationException [Doğrulama Başarısız: 1: hayır istekleri eklenmiştir;] "}

Herkes bu JSON türünü indekslemede yardımcı olabilir mi?

+0

Bana indeks isteği söyleyebilir sen –

+0

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

cevap

9

Yapmanız gereken şey, bu JSON dosyasını okumak ve sonra _bulk endpoint tarafından beklenen biçimiyle toplu bir istek oluşturmak, yani komut satırı için bir satır ve belgenin bir satırı, yeni satır karakteri ile ayrılmış ... durulayın ve her belge için tekrarlayın:

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 
' 

Sadece emin kullandığınız gerçek endeks ve tiplerle ilgili your_index ve your_type yerine olun. komut satırı bu URL'nizde belirtilirse _index ve _type kaldırarak, kısaltılabilir o

GÜNCELLEME

Not. Eşlemenizde path to your id field belirtiyorsanız, _id'u kaldırmak da mümkündür (bu özellik ES 2.0'da kullanımdan kaldırılacaktır). En azından, komut satırı tüm belgeler için {"index":{}} benzeyebilir ama her zaman

GÜNCELLEME (bu durumda index belge olarak) gerçekleştirmek istediğiniz işlemin hangi tür belirtmek amacıyla zorunlu olacak 2

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

/home/data1.json bu gibi görünmelidir:

bugün itibariyle
{"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

Bahsettiğiniz formatı alıyorum ama sormak istedim bir geçici çözümüm varsa, bu {"index": {"_index": "your_index", "_type": "your_type", "_id": "975463711"}} gibi bir şey belirtmem gerekmiyor. json'da belge var mı? –

+0

Her belge için komut satırı her zaman zorunludur. URL'nize dizin ve yazım adını eklerseniz (örn. 'Localhost: 9200/your_index/your_type/_bulk'), kısaltmak için' _index' ve '_type' komut satırından kaldırabilirsiniz. Ayrıca, '_id' belirtmek zorunda kalmanın bir yolu yoktur, ancak en azından, her zaman belge ile hangi işlemi gerçekleştirmek istediğinizi belirtmeniz gerekir, yani yapabileceğiniz en kısa süre, '{"index": {} } ' – Val

+0

İstenilen istek dizini -XPOST localhost: 9200/index_local/my_doc_type/_bulk --data-binary --data @/home/data1.json Burada dizin ve istekte doc_type belirledim, json verilerim Bunun gibi?[{"index": {}} {"Tutar": "480", "Miktar": "2", "Kimlik": "975463711", "Client_Store_sk": "1109"}, {"index": {}} {"Tutar": "2105", "Miktar": "2", "Kimlik": "975463943", "Client_Store_sk": "1109"}, {"index": {}} {" ":" 2107 "," Miktar ":" 3 "," Kimlik ":" 974920111 "," Client_Store_sk ":" 1109 "} ] –

2

, 6.1.2 ElasticSearch son sürümü ve bukle komuttur Windows (x64) benim için çalışan mydata.json bulunması gereken verinin biçimi

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

olan @ val cevabı gösterildiği gibi aynı kalır

İlgili konular