首页 > 解决方案 > Elasticsearch 脚本:添加新数组失败

问题描述

我正在尝试使用无痛脚本将新数组字段添加到文档中,但失败了。

这是要更新的文档

"_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)"

仍然有同样的错误

谁能帮我指出问题所在?非常感谢。

标签: elasticsearchelasticsearch-painless

解决方案


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


推荐阅读