更新弹性搜索字段的问题

Issue in updating elastic search field

这是我的结果源的样子。

{"_source": {"Name": "Where's My Crown Angry birds 3","movie_id":69}}

我需要将名称字段更新为“'Where's My Crown'”。我使用了以下查询:

{"script": {"inline": "ctx._source.Name='Where's My Crown'","lang": "painless"},"query": {"match": {"movie_id": 69}}}

但是我得到了这个错误:

{'type': 'illegal_argument_exception', 'reason': "unexpected token ['s'] was expecting one of [{<EOF>, ';'}]."}**

请帮我解决这个问题。

这是因为 "Where's My Crown" 中有一个单引号,它干扰了整个字符串周围的单引号。

考虑这样做(使用 params):

{  
   "script": {
       "inline": "ctx._source.Name = params.newName",
       "params": {
         "newName": "Where's My Crown"
       },
       "lang": "painless"
   },
   "query": {"match": {"movie_id": 69}}
}

我尝试了以下解决方案,它对我也有效:

替换 'Where's My Crown'\"Where's My Crown\"

所以在我的情况下(JavaScript,而不是 Python,但我认为它的工作方式类似):

const script = Object.entries(newBody).reduce((prev, [key, value]) => {
  return `${prev} ctx._source.${key}=\"${value}\";`;
}, '');