如何在elasticsearch中插入对象数组

时间:2015-08-25 14:41:36

标签: javascript scala 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 请帮助我,我做错了

更新 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]]; ]

1 个答案:

答案 0 :(得分: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);
 }
}

现在错误日志会更准确,你可以从那里了解错误。