我正在尝试使用数组更新文档中的字段。我想在“产品”字段中添加一个数组。我试过这个:
POST /index/type/1/_update
{
"doc" :{
"products": [
{
"name": "A",
"count": 1
},
{
"name": "B",
"count": 2
},
{
"name": "c",
"count": 3
}
]
}
}
这是我在尝试运行代码时得到的错误响应:
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "failed to parse [products]"
}
],
"type": "mapper_parsing_exception",
"reason": "failed to parse [products]",
"caused_by": {
"type": "illegal_state_exception",
"reason": "Can't get text on a START_OBJECT at 1:2073"
}
},
"status": 400
}
任何人都知道我做错了什么?
答案 0 :(得分:16)
消息"无法在START_OBJECT"上获取文字。意味着Elasticsearch期望输入类型" string"但是你试图给一个对象作为输入。
如果您查看Kibana,您会发现该字段"产品"存在于那里并被定义为一个字符串。但是,既然您正在输入字典列表,那么该字段"产品"应该从一开始就被定义为一个对象(最好用它中的动态字段)。一个例子是(参见https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html)
的完整示例 "products": {
"dynamic": true,
"properties": {}
}
但是,由于您已经拥有索引,因此您无法更改映射,因此您需要删除索引,事先进行映射,然后进行更新。