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

Elasticsearch如何删除指定索引中除特定ID集合外的所有记录?

解决Elasticsearch保留指定ID删除其余数据的问题

你之前的问题出在用了match查询来匹配多个ID,match并不支持传入数组作为查询值,要匹配多个字段值应该用terms查询。

直接用下面的_delete_by_query请求就能实现你的需求——删除索引中所有ID不在指定列表里的文档:

POST /myindex/_delete_by_query
{
  "query": {
    "bool": {
      "must_not": [
        {
          "terms": {
            "id": [12345, 67890]
          }
        }
      ]
    }
  }
}

这个请求的逻辑和你写的SQL等价(修正了SQL里的语法问题,应该用NOT IN而不是!=):

DELETE * FROM <my-index> WHERE <id> NOT IN (12345, 67890)

额外提醒

  • 如果你的索引数据量很大,_delete_by_query会占用较多资源,建议在业务低峰期执行;
  • 可以添加wait_for_completion=false参数让请求异步执行,避免超时;
  • 执行前可以先用_search接口测试这个查询是否能正确筛选出要删除的文档,确保逻辑无误。

内容的提问来源于stack exchange,提问作者Lucas Larsson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:03:26