2015-09-30 19 views
8

Đây là yêu cầu của tôi:Elasticsearch chỉ số lượng lớn api qua phần còn lại endpoint

POST /_bulk 
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } 
{"firstname":"first_name1","lastname":"last_name1"}, 
{"firstname":"first_name2","lastname":"last_name2"}, 
{"firstname":"first_name3","lastname":"last_name3"}} 

Dưới đây là lỗi:

{ "error": "IllegalArgumentException[Malformed action/metadata line [3], expected START_OBJECT or END_OBJECT but found 

[VALUE_STRING]]", "status": 500 }

Về cơ bản, mỗi tài liệu là { "firstname": ___, "lastname": ____} Tôi không muốn đưa họ vào một trường chính. Tôi về cơ bản bị thiếu gì?

+0

này cũng là một hữu ích, liên kết liên quan: https://discuss.elastic.co/t/ bulk-indexing-document-without-provide-id-using-php-api/25521/5 – phirschybar

Trả lời

12

Bạn đang đơn giản là thiếu một dòng hành động cho các tài liệu thứ hai và thứ ba, hãy thử như thế này:

POST /_bulk 
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } 
{"firstname":"first_name1","lastname":"last_name1"} 
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "2" } } 
{"firstname":"first_name2","lastname":"last_name2"} 
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "3" } } 
{"firstname":"first_name3","lastname":"last_name3"} 
+3

[Đừng lặp lại chính mình] (https://www.elastic.co/guide/en/elasticsearch/guide/current /bulk.html#_don_8217_t_repeat_yourself) cho thấy một cách để tránh lặp lại '' '_index''' và' '' _type''' giá trị tất cả các thời gian. Tuy nhiên, xin lưu ý rằng, * action * vẫn phải được chỉ định cho từng tài liệu. –

+0

Tất nhiên, tốt hơn hết là chỉ định chỉ mục và loại trực tiếp trong URL nếu có thể. Đó chỉ là để minh họa cho hành động _bulk – Val

+1

có. Trước đó, tôi đã có một ấn tượng sai lầm khi tôi đọc tài liệu và nghĩ rằng việc cung cấp * hành động * ở phần đầu của tệp sẽ phục vụ mục đích tốt. Tôi đã học được đó không phải là trường hợp khó khăn. –

Các vấn đề liên quan