如何通过Elasticsearch Bulk API批量删除跨多索引的文档?
Elasticsearch Bulk API 跨多索引删除文档实现方法
Bulk API 原生支持单次请求操作多个索引下的文档,不存在仅支持单索引删除的限制,之前遇到的单索引限制,本质是请求写法绑定了单索引路径导致的,具体实现方式如下:
- 首先选择无索引绑定的全局Bulk端点发起请求,即请求路径使用
POST /_bulk,不要使用POST /{单索引名}/_bulk这类绑定了单个索引的端点。 - 在请求体的每一条删除操作的元数据中,单独为当前待删除文档声明所属的
_index和对应的_id,不同索引的文档可以混排在同一个Bulk请求里,不需要按索引分组。
请求示例
POST /_bulk Content-Type: application/x-ndjson { "delete" : { "_index" : "index1", "_id" : "1001" } } { "delete" : { "_index" : "index2", "_id" : "2003" } } { "delete" : { "_index" : "index1", "_id" : "1005" } } { "delete" : { "_index" : "index2", "_id" : "2007" } }
注意事项
- 你也可以在请求路径上拼接多索引作为默认索引,格式为
POST /index1,index2/_bulk,这种写法下如果某条操作没有显式指定_index,会在路径声明的索引范围内执行操作。生产环境建议每一条操作都显式指定_index,避免默认路由导致的误操作。 - Bulk API的删除操作是按文档
_id精准删除,需要提前获取每个待删文档的所属索引和文档ID;如果需要按查询匹配规则跨索引批量删除文档,还是需要使用delete_by_query API。 - Bulk请求体必须使用NDJSON格式,每一行是一条完整的操作元数据或文档内容,行与行之间不能存在空行,否则会触发格式解析错误。
内容的提问来源于stack exchange,提问作者mohit jain
相关产品推荐
相关产品推荐

