ElasticSearch 实战:ElasticSearch文档删除

Elasticsearch 实战:Elasticsearch 文档删除

在 Elasticsearch 中,删除文档是一个相对直接的过程,通过发送一个 DELETE 请求到文档的唯一标识(_index_type_id)即可完成。以下是如何删除文档的详细步骤:

**1. 确定待删除文档的唯一标识

在删除文档之前,需要知道要删除的文档的唯一标识。这个标识由三部分组成:索引名 (_index)、类型名 (_type) 和文档 ID (_id)。例如,要删除索引 my_index 中类型为 _doc、ID 为 1 的文档,其唯一标识为:

my_index/_doc/1

**2. 发送 DELETE 请求

使用 DELETE HTTP 方法,向 Elasticsearch 发送请求,目标 URL 为文档的唯一标识:

DELETE /my_index/_doc/1

**3. 响应与确认

如果文档存在且删除成功,Elasticsearch 将返回一个 HTTP 200 状态码,响应体类似于:

{
  "_index": "my_index",
  "_type": "_doc",
  "_id": "1",
  "_version": 3,
  "result": "deleted",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": .png",
  "_primary_term": 2
}

其中,result 字段显示操作结果为 "deleted",表明文档已被成功删除。

如果文档不存在或者由于权限等问题无法删除,Elasticsearch 将返回非 200 的 HTTP 状态码以及相应的错误信息。

**4. 批量删除文档

对于需要删除大量文档的场景,可以使用 delete_by_query API 执行批量删除。该 API 允许您基于查询条件删除符合条件的所有文档。以下是一个示例:

POST /my_index/_delete_by_query
{
  "query": {
    "match": {
      "author": "John Doe"
    }
  }
}

在这个例子中,所有 author 字段为 “John Doe” 的文档都将被删除。请注意,批量删除操作可能对集群性能产生较大影响,尤其是在大型索引中,因此在执行此类操作时应谨慎评估其对系统的影响,并可能需要在低峰时段进行。

**5. 乐观锁定(Optimistic Concurrency Control)

如同文档修改,删除文档时也可以利用乐观锁定(Optimistic Concurrency Control,OCC)机制防止并发删除导致的问题。通过指定 if_primary_termif_sequence_number 参数(或仅使用 _version 参数),可以在删除文档时检查其版本是否与预期相符。如果不符,说明文档已被其他进程更新,删除操作将失败,从而避免意外删除已更新的文档。

DELETE /my_index/_doc/1?if_primary_term=1&if_sequence_number=123

总之,删除 Elasticsearch 中的文档只需向其唯一标识发送一个 DELETE 请求即可。对于批量删除或需要考虑并发控制的场景,可以使用 delete_by_query API 或乐观锁定机制。在进行删除操作时,务必确保操作的正确性和对系统的影响可控。

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值