环境
虚拟机:centos7
操作系统:win7
elasticsearch:5.5
Delete API
delete api
允许从基于id
的指定的数据库中删除json
类型的文档。
下面的例子是从数据库twitter
中的表名为tweet
中删除id
为1的文档:
DELETE /twitter/tweet/1
结果为:
{
"_shards" : {
"total" : 2,
"failed" : 0,
"successful" : 2
},
"found" : true,
"_index" : "twitter",
"_type" : "tweet",
"_id" : "1",
"_version" : 2,
"result": "deleted"
}
Versioning(版本控制)
索引中每个文档都是被版本控制的。当删除文档时,可以指定version
来确保我们正在尝试删除的相关文档实际上确实是删除的,同时没有发生更改。在文档上执行的每个写操作,包括删除,都会引起版本号增加。
Routing(路由)
当索引(数据库)使用了routing
来控制路由时,为了删除文档,应该提供路由的值,例如:
DELETE /twitter/tweet/1?routing=kimchy
上面是删除表tweet
中id
为1
的文档。注意,发一个没有正确路由的删除请求,会造成文档不被删除。
当_routing
映射为required
时,并且没有指定路由的值,delete api
将会抛出一个RoutingMissingException
异常,并且会拒绝请求。
Parent
设置parent
参数,与设置路由参数基本相同。
注意:删除父文档不会立即其子项。给一个父id来删除所有子文档的一个方法是使用Delete By Query API
来执行带自动生成(和倒排索引)字段_parent
的索引(即数据库),它的格式是parent_type#parent_id
。
当删除子文档时其父id
必须指定,否则删除请求将会被拒绝,并且会抛出RoutingMissingException
异常。
Automatic index creation
如果之前没有创建索引(即:数据库)的话,删除操作将会自动创建一个索引(即数据库),并且也会自动创建一个指定的动态类型映射(如果之前没有创建的话)。
分布式
删除操作会得到一个被哈希的分片id
。接着会被重定向到该id
组中的主分片中,并且会被复制(如果需要)到该id组中的副本分片中。
Wait For Active Shards
当进行删除请求时,你可以设置wait_for_active_shards
,参数来要求在开始处理删除请求之前,需要活动的副本分片的最小数量。有关详细信息和使用示例,可以参考这里
Refresh
用于控制通过本次请求发生的改变对于搜索是可见的。参考?refresh
Timeout
分配执行删除操作的主分片可能在执行删除操作时。可能的原因有主分片正在从存储中恢复或者正在进行迁移。默认情况下,删除操作在失败或者响应错误之前,等待主分片(变为可可用)最多一分钟。timeout
参数可以用来明确指定等待多久时间。例如下面例子等待5分钟。
DELETE /twitter/tweet/1?timeout=5m
参考地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html