2015-08-25 2 views
1

У меня есть документ в ElasticSearchкак вставить массив объектов в elasticsearch

{ 
    "uuid" : 0, 
    "StatusHistoryList" : [ 
     { 
      "ArtWorkDate" : "2015-08-25T16:29:32.011+05:00", 
      "ArtworkStatus" : "ACTIVE" 
     } 
    ] 
} 

Я добавляю это с помощью кода, но возникли проблемы при добавлении этого поля массива StatusHistoryList я это делаю, как этот

var xb:XContentBuilder=XContentFactory.jsonBuilder().startObject() 
         .field("uuid",artWork.getUuid) 

     xb.startArray("StatusHistoryList") 
     for(h<-history) 
     { 
     var date=h.date.toString() 
     var artworkStatus=h.artworkStatus.toString 
     xb.startObject() 
     xb.field("ArtWorkDate",date) 
     xb.field("ArtworkStatus",artworkStatus) 
     xb.endObject() 
     } 
     xb.endArray() 
     xb.endObject() 

val bulkRequest=client.prepareBulk() 
bulkRequest.add(client.prepareIndex("arteciatedb","artWork",artWork.uuid.toString()) 
     .setSource(xb) 
) 
val bulkResponse =bulkRequest.execute().actionGet() 
if(bulkResponse.hasFailures()) 
{ 
log.error("something is wrong here ") 
}} 

на консоли она печати something is wrong here , пожалуйста, помогите мне, где я делаю неправильно

UPDATE после получения ответа от Nimo здесь выход печатается на консоли

controller ERROR - failed to executefailure in bulk execution: 
[0]: index [arteciatedb], type [artWork], id [0], message [MapperParsingException[failed to parse [StatusHistoryList]]; nested: ElasticsearchIllegalArgumentException[unknown property [ArtWorkDate]]; ] 
+0

Получаете ли вы более точное сообщение об ошибке из 'bulkResponse'? –

ответ

1

Чтобы увидеть, где вы делаете неправильно:

var xb:XContentBuilder=XContentFactory.jsonBuilder().startObject() 
         .field("uuid",artWork.getUuid) 

     xb.startArray("StatusHistoryList") 
     for(h<-history) 
     { 
     var date=h.date.toString() 
     var artworkStatus=h.artworkStatus.toString 
     xb.startObject() 
     xb.field("ArtWorkDate",date) 
     xb.field("ArtworkStatus",artworkStatus) 
     xb.endObject() 
     } 
     xb.endArray() 
     xb.endObject() 

val bulkRequest=client.prepareBulk() 
bulkRequest.add(client.prepareIndex("arteciatedb","artWork",artWork.uuid.toString()).setSource(xb)) 
try { 
BulkResponse response=currentRequest.execute().actionGet(); 
if (response.hasFailures()) { 
logger.error("failed to execute" + response.buildFailureMessage()); } 
} catch (Exception e) { 
logger.error("Failed to process bulk",e); 
} 
} 

Теперь журнал ошибок будет более точным и вы можете понять, что там не так.

+0

см. Мой обновленный вопрос – swaheed

+0

Я думаю, что это простая ошибка, вы должны изменить var artworkStatus = h.artworkStatus.toString для var artworkStatus = h.artworkStatus.toString() – Arsaceus

Смежные вопросы