有没有办法使用elasticsearch update_by_query 删除数组的元素?

发布于 2025-01-17 07:47:04 字数 760 浏览 2 评论 0原文

弹性搜索版本:7.8.1

[
    ...
    {
        "target" : [
            { "docId" : "operator" },
            { "docId" : "test" },
            { "docId" : "abcde" },
        ]
    }
    ...
]

你好? 我想从上面elasticsearch中名为target的数组中删除docId为operator的元素。

我尝试了以下但失败了。 我的代码的哪一部分是错误的?

{
  "query": {
    "terms": {
      "target": [
        {
          "docId": "operator"
        }
      ]
    }
  },
  "script": {
    "source": " for (int i = 0; i < ctx._source.target.length(); i++) { if (ctx._source.target[i].docId == params.docId) { ctx._source.target.remove(i);}}",
    "params": {
      "docId": "operator"
    }
  }
}

elasticsearch version : 7.8.1

[
    ...
    {
        "target" : [
            { "docId" : "operator" },
            { "docId" : "test" },
            { "docId" : "abcde" },
        ]
    }
    ...
]

Hello?
I want to delete the element whose docId is operator from the above array called target in elasticsearch.

I tried the below but failed.
What part of my code is wrong?

{
  "query": {
    "terms": {
      "target": [
        {
          "docId": "operator"
        }
      ]
    }
  },
  "script": {
    "source": " for (int i = 0; i < ctx._source.target.length(); i++) { if (ctx._source.target[i].docId == params.docId) { ctx._source.target.remove(i);}}",
    "params": {
      "docId": "operator"
    }
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦过后 2025-01-24 07:47:04

查询错误,length() 也不是函数。

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "target.docId": "operator"
        }
      }
    }
  },
  "script": {
    "lang": "painless",
    "source": " for (int i = 0; i < ctx._source.target.length; i++) { if (ctx._source.target[i].docId == params.docId) { ctx._source.target.remove(i);}}",
    "params": {
      "docId": "operator"
    }
  }
}

The query was wrong and length() was not a function either.

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "target.docId": "operator"
        }
      }
    }
  },
  "script": {
    "lang": "painless",
    "source": " for (int i = 0; i < ctx._source.target.length; i++) { if (ctx._source.target[i].docId == params.docId) { ctx._source.target.remove(i);}}",
    "params": {
      "docId": "operator"
    }
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文