Elasticsearch脚本:无法添加新数组

时间:2019-06-05 09:38:16

标签: elasticsearch elasticsearch-painless

我正尝试使用轻松的脚本将新的数组字段添加到文档中,但是失败了。

这是要更新的文档

"_source": {
  "a": {}
}

我想在a下添加一个新数组b。所以我有这个脚本

{
  "script": {
    "source": "ctx._source.a.b=[params.id]",
    "lang": "painless",
    "params": {
      "id": "id001"
    }
  }
}

但是我遇到了错误

{
    "status": 400, 
    "error": {
        "root_cause": [
            {
                "reason": "object mapping for [a.b] tried to parse field [null] as object, but found a concrete value", 
                "type": "mapper_parsing_exception"
            }
        ], 
        "type": "mapper_parsing_exception", 
        "reason": "object mapping for [a.b] tried to parse field [null] as object, but found a concrete value"
    }
}

我试图通过创建一个空数组

"ctx._source.a.b=new ArrayList()"

然后将元素附加到数组

"ctx._source.a.b.add(params.id)"

仍然出现相同的错误

有人可以帮助我指出问题所在吗? 非常感谢。

1 个答案:

答案 0 :(得分:0)

找到了根本原因。 a.b是在索引映射中定义的,因为我之前已经定义了它。认为该字段已从文档中删除了。