更新弹性搜索字段的问题
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}\";`;
}, '');
这是我的结果源的样子。
{"_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}\";`;
}, '');