elasticsearch,Node.js,elasticsearch" /> elasticsearch,Node.js,elasticsearch" />

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

Node.js elasticsearch按查询更新不允许使用特殊字符更新值,node.js,elasticsearch,Node.js,elasticsearch,我在字段中有特殊字符的数据!当我添加这些数据时,它会正确地插入Elasticsearch!但在更新时,它给出了错误 POST index_name/_update_by_query { "script": { "source": "ctx._source.key1='vakey22'", "lang": "painless" }, "query": {

我在字段中有特殊字符的数据!当我添加这些数据时,它会正确地插入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_exception]编译错误,带有{script_stack={0=…ctx.\u source.key1=;ctx.\u source.key2…&1=^--HERE}&script=ctx.\u source.key3='0'


我们如何解决这个问题?

我认为问题在于,由于您发布的是JSON,您需要转义转义字符,即\。因此,要转义特殊字符,这将是\\,并且要获得实际的反斜杠,您应该写\\\\。这个github讨论了一些类似的内容,尽管在不同的上下文中有点类似。因此,您的查询将我喜欢这样:

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

我认为问题在于,由于您发布的是JSON,您需要转义转义字符,即\。因此,要转义特殊字符,即\\,并获得实际的反斜杠,您应该编写\\\。此github讨论了一些类似的内容,尽管在不同的上下文中有点类似。因此,您的查询如下所示:

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

感谢您的帮助!我使用了以下代码使用它,我们不需要添加反斜杠脚本:{source:ctx.\u source.key1=params.key1;,lang:painless,params:{key1:vak\ey22}}注意:当值中有双引号时,我们只需要添加反斜杠脚本来获得帮助!我使用了以下代码,我们不需要添加反斜杠脚本:{source:ctx.\u source.key1=params.key1;,lang:painless,params:{key1:vak\ey22}注意:当值中有双引号时,我们只需要添加反斜杠