2015-08-25 78 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 通過尼莫這裏的答案後打印在控制檯輸出

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