elasticsearch按查询更新不允许使用特殊字符更新值

nkcskrwz  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(656)

我在字段中有特殊字符的数据!当我添加这些数据,然后它插入ElasticSearch正确!但在更新时,它给出了错误!

POST index_name/_update_by_query
{
"script": {
   "source": "ctx._source.key1='vakey22'",
   "lang": "painless"
 },
 "query": { 
    "bool": {
      "must": [
        {"term":{"condtion1":"value1"}}
      ]
    }
  }
}

然后它工作得很完美,但是当我们尝试添加任何特殊字符时,它就会出错

POST index_name/_update_by_query
{
  "script": {
     "source": "ctx._source.key1='vak\ey22'",
      "lang": "painless"
  },
  "query": { 
    "bool": {
      "must": [
        {"term":{"condtion1":"value1"}}
      ]
    }
  }
}

添加任何特殊字符时出现以下错误
[script\u exception]编译错误,{script\u stack={0=“。。。ctx.\u source.key1='';ctx.\u source.key2…&1=“^----here”}&script=“ctx.\u source.key3=”0'
怎么解决?

j13ufse2

j13ufse21#

我认为问题是因为你发布的是json,你需要转义你的转义字符(也就是 \ ). 所以为了逃避特殊的角色 \\ 为了得到一个真正的反斜杠,你应该写 \\\\ . 这个github问题讨论了一些类似的东西,尽管在不同的上下文中有点类似。所以你的查询是这样的:

POST index_name/_update_by_query
{
  "script": {
     "source": "ctx._source.key1='vak\\\\ey22'",
      "lang": "painless"
  },
  "query": { 
    "bool": {
      "must": [
        {"term":{"condtion1":"value1"}}
      ]
    }
  }
}

相关问题