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

如何在Elasticsearch中删除跨多个索引的相同Data_id关联文档

Elasticsearch跨索引关联文档删除方案

你提到的语句可行性说明

你写的DELETE /sample_1, sample_2/_doc/224345565逻辑是可行的,但是有两个语法问题需要修正:

  • ES的索引名大小写敏感,你示例中的索引为Sample_1、Sample_2,语句中写小写sample_1会匹配失败
  • 多个索引之间不能加空格,否则会被识别为无效路径

修正后的正确单ID批量删除语句为:

DELETE /Sample_1,Sample_2/_doc/224345565

注意:该语句仅适用于你两个索引中的文档_id就是Data_id的值的场景,如果Data_id只是文档内的普通字段、文档_id为ES自动生成,则不能使用该语句,需要用_delete_by_query方案。

完整操作步骤

分两种场景:

场景1:已经确认要删除的Data_id为224345565

  • 如果Data_id是文档_id:直接执行上面修正后的DELETE语句即可,一次请求就能同步删除两个索引中的对应文档。
  • 如果Data_id是普通字段:执行以下_delete_by_query语句:
POST /Sample_1,Sample_2/_delete_by_query
{
  "query": {
    "term": {
      "Data_id": 224345565
    }
  }
}

场景2:仅知道要删除Sample_1中Name为HCM的文档,不知道对应Data_id

第一步:先查询匹配文档的Data_id:

GET /Sample_1/_search
{
  "query": {
    "term": {
      "Name.keyword": "HCM"
    }
  },
  "_source": ["Data_id"]
}

第二步:拿到返回结果中的Data_id后,执行场景1中的删除操作即可。

注意事项

  • 执行删除前建议先将删除语句中的DELETE/_delete_by_query替换为GET/_search执行,验证匹配的文档数量和内容是否正确,避免误删
  • 生产环境数据量较大时,可在_delete_by_query接口后加?wait_for_completion=false参数异步执行删除,避免请求超时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:21:00