删除 API编辑

从指定索引中删除 JSON 文档。

请求编辑

DELETE /<index>/_doc/<_id>

先决条件编辑

  • 如果启用了 Elasticsearch 安全功能,您必须对目标索引或索引别名具有 deletewrite 索引权限

描述编辑

使用 DELETE 从索引中删除文档。您必须指定索引名称和文档 ID。

您不能直接向数据流发送删除请求。要删除数据流中的文档,您必须定位包含该文档的备份索引。请参阅 更新或删除备份索引中的文档

乐观并发控制编辑

删除操作可以有条件地执行,并且只有在文档的最后一次修改被分配了由 if_seq_noif_primary_term 参数指定的序列号和主项时才会执行。如果检测到不匹配,操作将导致 VersionConflictException 和状态代码 409。有关更多详细信息,请参阅 乐观并发控制

版本控制编辑

索引的每个文档都有版本。删除文档时,可以指定 version 以确保我们尝试删除的相关文档确实正在被删除,并且在此期间没有发生更改。对文档执行的每个写入操作(包括删除)都会导致其版本递增。删除文档的版本号在删除后会保留一段时间,以允许控制并发操作。删除文档的版本保留的时间长度由 index.gc_deletes 索引设置决定,默认值为 60 秒。

路由编辑

如果在索引期间使用路由,则还需要指定路由值才能删除文档。

如果 _routing 映射设置为 required 并且没有指定路由值,则删除 API 会抛出 RoutingMissingException 并拒绝请求。

例如

resp = client.delete(
    index="my-index-000001",
    id="1",
    routing="shard-1",
)
print(resp)
response = client.delete(
  index: 'my-index-000001',
  id: 1,
  routing: 'shard-1'
)
puts response
DELETE /my-index-000001/_doc/1?routing=shard-1

此请求删除了 id 为 1 的文档,但它是根据用户进行路由的。如果未指定正确的路由,则不会删除文档。

自动索引创建编辑

如果使用 外部版本控制变体,则删除操作会自动创建指定的索引(如果不存在)。有关手动创建索引的信息,请参阅 创建索引 API

分布式编辑

删除操作被哈希到一个特定的分片 ID 中。然后它被重定向到该 ID 组中的主分片,并在需要时复制到该 ID 组中的分片副本。

等待活动分片编辑

在执行删除请求时,您可以设置 wait_for_active_shards 参数,以要求在开始处理删除请求之前,必须有最少数量的分片副本处于活动状态。有关更多详细信息和使用示例,请参阅 此处

刷新编辑

控制此请求所做的更改何时对搜索可见。请参阅 ?refresh

超时编辑

分配执行删除操作的主分片在执行删除操作时可能不可用。导致这种情况的一些原因可能是主分片当前正在从存储中恢复或正在进行重新分配。默认情况下,删除操作将等待主分片最多 1 分钟才能变为可用,然后才会失败并响应错误。可以使用 timeout 参数显式指定等待时间。以下是如何将其设置为 5 分钟的示例

resp = client.delete(
    index="my-index-000001",
    id="1",
    timeout="5m",
)
print(resp)
response = client.delete(
  index: 'my-index-000001',
  id: 1,
  timeout: '5m'
)
puts response
DELETE /my-index-000001/_doc/1?timeout=5m

路径参数编辑

<index>
(必需,字符串) 目标索引的名称。
<_id>
(必需,字符串) 文档的唯一标识符。

查询参数编辑

if_seq_no
(可选,整数) 仅在文档具有此序列号时才执行操作。请参阅 乐观并发控制
if_primary_term
(可选,整数) 仅在文档具有此主项时才执行操作。请参阅 乐观并发控制
refresh
(可选,枚举) 如果为 true,则 Elasticsearch 会刷新受影响的分片以使此操作对搜索可见,如果为 wait_for,则等待刷新以使此操作对搜索可见,如果为 false,则不执行任何刷新操作。有效值:truefalsewait_for。默认值:false
routing
(可选,字符串) 用于将操作路由到特定分片的自定义值。
timeout
(可选,时间单位) 用于 等待活动分片 的时间段。默认为 1m(一分钟)。
version
(可选,整数) 用于并发控制的显式版本号。指定的版本必须与文档的当前版本匹配,请求才能成功。
version_type
(可选,枚举) 特定的版本类型:externalexternal_gte
wait_for_active_shards

(可选,字符串) 在继续操作之前必须处于活动状态的分片副本数量。设置为 all 或任何正整数,直到索引中的分片总数(number_of_replicas+1)。默认值:1,主分片。

请参阅 活动分片

示例编辑

my-index-000001 索引中删除 JSON 文档 1

resp = client.delete(
    index="my-index-000001",
    id="1",
)
print(resp)
response = client.delete(
  index: 'my-index-000001',
  id: 1
)
puts response
DELETE /my-index-000001/_doc/1

API 返回以下结果

{
  "_shards": {
    "total": 2,
    "failed": 0,
    "successful": 2
  },
  "_index": "my-index-000001",
  "_id": "1",
  "_version": 2,
  "_primary_term": 1,
  "_seq_no": 5,
  "result": "deleted"
}