Elasticsearch 提供多维度数据删除能力,支持从单文档到全索引的多种操作,具体方法如下:
一、删除操作分类
1. 删除单个文档(基于ID)
通过指定文档 _id 精准删除单条数据,适用于已知文档唯一标识的场景:
json
Copy Code
DELETE /index_name/_doc/document_id
2. 按条件批量删除文档
使用 _delete_by_query API 根据查询条件批量删除数据:
json
Copy Code
POST /index_name/_delete_by_query
{
"query": {
"term": { "field_name": "value_to_delete" } // 匹配条件删除
}
}
3. 清空索引数据(保留结构)
保留索引映射但删除所有文档,适用于重置数据场景:
json
Copy Code
POST /index_name/_delete_by_query
{
"query": { "match_all": {} } // 匹配全部文档
}
4. 删除整个索引(结构+数据)
彻底删除索引及其数据,类似数据库 DROP TABLE 操作:
json
Copy Code
DELETE /index_name
二、操作对比与适用场景
操作类型 命令/API 数据影响 典型场景 引用来源
单文档删除 DELETE /index/_doc/id 删除指定ID的文档 精准清理无效数据
条件删除 _delete_by_query 批量删除匹配条件的文档 清理过期日志、错误数据
清空索引数据 _delete_by_query + match_all 删除全部文档,保留映射 数据重置或测试环境清理
删除索引 DELETE /index 删除索引及其所有数据 废弃索引清理或存储优化
三、关键注意事项
权限控制
禁止开放 DELETE /* 或 DELETE _all 权限,避免误删全库
yaml
Copy Code
# elasticsearch.yml 配置
action.destructive_requires_name: true
数据备份
执行批量删除前建议快照备份,防止误操作
性能影响
大范围 _delete_by_query 操作可能引发性能波动,建议分片执行或低峰期操作
版本兼容性
_delete_by_query 在 7.x+ 版本默认集成,旧版本需安装 delete-by-query 插件
四、操作验证示例
删除完成后,通过以下命令确认结果:
json
Copy Code
GET /index_name/_count // 验证文档数量:ml-citation{ref="3,7" data="citationList"}
GET /index_name/_mapping // 检查索引结构是否保留:ml-citation{ref="6,7" data="citationList"}