如何使用curl删除弹性搜索中的arraylist值?

bal*_*a s 8 arraylist elasticsearch amazon-elastic-beanstalk

如何使用sense console或curl删除Elasticsearch中的arraylist值?

我想删除任何数组元素.?

POST /q/q/
{
    "a": [
    "z", "q", "1"
    ]
}
Run Code Online (Sandbox Code Playgroud)

它对我不起作用:

POST /q/q/AV4sjk40mWHLgYFNkmNd/_update
{
    "script": {
        "lang": "painless",
        "inline": "ctx._source.a -=newsupp",
        "params": {
            "newsupp": "p" 
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

要么

POST /q/q/AV4sjk40mWHLgYFNkmNd/_update
{
    "script": {
        "lang": "painless",
        "inline": "ctx._source.a.remove("1")"
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 14

如果要删除列表中的所有匹配项,可以执行以下操作:

{
  "script": {
    "lang": "painless",
    "inline": "ctx._source.a.removeAll(Collections.singleton('1'))"
  }
}
Run Code Online (Sandbox Code Playgroud)

或者如果你想删除第一个,如下所示:

{
  "script": {
    "lang": "painless",
    "inline": "ctx._source.a.remove(ctx._source.a.indexOf('1'))"
  }
}
Run Code Online (Sandbox Code Playgroud)

另请注意,如果你想使用双引号,那很好,但你需要逃避它们,比如ctx._source.a.indexOf(\"1\")).

或者使用params:

{
  "script": {
    "lang": "painless",
    "inline": "ctx._source.a.remove(ctx._source.a.indexOf(yourParamName))",
    "params": {
      "yourParamName": "1"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@dshockley,这个效果很好。虽然,我确实必须做一个小改变。我必须通过使用'params.yourParamName'来引用我的参数名称,例如`ctx._source.a.remove(ctx._source.a.indexOf(params.yourParamName))`` (2认同)