脚本PARAMS不支持类型的值:在ElasticSearch 7.3版更新脚本START_ARRAY

2019-10-29 05:57发布

我试图更新文档我的索引,并通过邮差混得更新API脚本以下错误

{
    "error": {
        "root_cause": [
            {
                "type": "x_content_parse_exception",
                "reason": "[5:15] [script] params doesn't support values of type: START_ARRAY"
            }
        ],
        "type": "x_content_parse_exception",
        "reason": "[5:15] [UpdateRequest] failed to parse field [script]",
        "caused_by": {
            "type": "x_content_parse_exception",
            "reason": "[5:15] [script] params doesn't support values of type: START_ARRAY"
        }
    },
    "status": 400
}

由于错误明显,说明我在我的文件,其中有一组数据在更新的字段。 下面是一个示例

"hasParts": [
    {
        "documentLevel": 2,
        "levelProperties": {
            //some properties
        }
    },
    {
        "documentLevel": 3,
        "levelProperties": {
            //some properties
        }
    },
    {
        "documentLevel": 3,
        "levelProperties": {
           //some properties
        }
    },
    {
        "documentLevel": 3,
        "levelProperties": {
            //some properties
        }
    }
]

我想更新使用更新的API上述属性的文件之一。

可这是可能的吗? 如果可能的话那么我究竟做错了什么? 先谢谢您的帮助。

编辑:这是脚本

{
  "script": {
    "source": "ctx._source.hasParts.add(params.haspart)",
    "lang": "painless",
    "params": [
      {
        "haspart": [
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          },
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          },
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          },
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          },
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          }
        ]
      }
    ]
  }
}

Answer 1:

您的params部分不能是一个数组,而是一个对象,使用这个脚本:

{
  "script": {
    "source": "ctx._source.hasParts.add(params.haspart)",
    "lang": "painless",
    "params": {
        "haspart": [
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          },
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          },
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          },
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          },
          {
            "documentLevel": 3,
            "levelProperties": {
              //some properties
            }
          }
        ]
    }
  }
}


文章来源: script params doesn't support values of type: START_ARRAY in ElasticSearch v7.3 Update script