You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elasticsearch中删除用户1粉丝列表中的用户2

解决Elasticsearch移除粉丝列表元素的问题

我来帮你搞定这个需求!要从用户1(id为1)的followers列表里移除用户2(id为2),你可以用Elasticsearch的**更新API(Update API)**结合Painless脚本来实现,具体分两种情况来看:

情况1:你的文档_source是用户对象数组(如你提供的搜索结果所示)

根据你给出的搜索结果,单个文档的_source是包含多个用户对象的数组,那对应的更新语句如下:

POST /users/user/742/_update
{
  "script": {
    "source": """
      for (def user : ctx._source) {
        if (user.id == '1') {
          user.followers.remove('2');
          break; // 找到目标用户后停止循环,提升效率
        }
      }
    """,
    "lang": "painless"
  }
}

语句说明:

  • POST /users/user/742/_update:指定要更新的索引名、类型名和文档ID(就是你搜索结果里那个hit的_id值742)。
  • Painless脚本遍历ctx._source数组,找到id为1的用户对象,然后调用remove('2')从他的followers列表里移除用户2的ID。

情况2:你的文档_source是单个用户对象(更常见的结构)

如果是每个文档对应一个用户(_source是单个用户对象,而非数组),那脚本会更简洁,甚至可以通过查询条件定位目标用户,不用依赖文档ID:

POST /users/user/_update_by_query
{
  "script": {
    "source": "ctx._source.followers.remove('2')",
    "lang": "painless"
  },
  "query": {
    "term": {
      "id": "1"
    }
  }
}

语句说明:

  • _update_by_query API会先执行query找到所有id为1的用户文档,然后对这些文档执行脚本操作,移除followers里的2。
  • 如果确定只有一个目标用户,也可以用单个更新API,只要替换掉文档ID即可。

注意事项:

  • 确保你的Elasticsearch版本支持Painless脚本(5.0及以上版本默认启用)。
  • 如果followers数组里本来就没有2这个值,脚本不会报错,也不会产生任何修改。
  • 执行更新后,可以重新搜索该文档,验证followers列表是否已经移除了用户2的ID。

内容的提问来源于stack exchange,提问作者Rizwan Saleem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:16:34