javascript - 如何在elasticsearch中插入对象数组

标签 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 ") 
}}

在控制台上打印这里出了问题 请帮助我哪里做错了

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

最佳答案

查看哪里做错了:

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);
 }
}

现在错误日志会更加准确,您可以从中了解问题所在。

关于javascript - 如何在elasticsearch中插入对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32207065/

相关文章:

python - 执行批量索引操作时如何在Elasticsearch中指定显式文档ID?

elasticsearch - 如何在Elasticsearch 5.x和Filebeat中解析日期

javascript - 有一个可以计算秒和毫秒的计时器

Java 从数组中获取范围

scala - ScalaStyle 报告的自动修复警告

scala - 是否可以提高akka调度器的准确性

elasticsearch - 如何在ElasticSearch中获取倒排索引的大小

javascript - Wordpress 后端 Javascript 错误

javascript - CryptoJS 解密 Malformed UTF-8 数据错误

javascript - 仅匹配一组