并发控制
Elasticsearch是分布式的,所以需要对请求进行并发控制。可以通过传递参数if_seq_no和if_primary_term来指定序列号和主项来控制文档的删除,只有在文档的序列号(_seq_no)和主项(_primary_term)与指定的值一致时才会执行删除操作,否则会返回version_conflict_engine_exception异常和状态码409。
版本控制
通过version参数可以确保想要删除的文档确实被删除了,且没有其他更改。对文档执行的每个写操作(包括删除操作)都会导致其版本增加。删除后的文档版本号在短时间内保持可用,以便控制并发操作。可用时间长度由索引设置index.gc_deletes决定,默认为60秒。
路由
如果在索引时使用了路由,那么在删除文档时需要通过_routing以同样的规则进行路由,否则文档不会被删除。如果定义了_routing映射并设置为必需的,则当没有提供或提取到路由值,删除操作会抛出RoutingMissingException异常并拒绝请求。
自动创建索引
如果使用外部版本控制变量,则如果之前没有创建索引,删除操作将自动创建索引。
等待活动分片
通过wait_for_active_shards参数可以设置开始处理删除请求前需要激活的分片副本的最少数量。
超时
在执行删除操作时,分配执行删除操作的主分片可能不可用。比如主分片正在从存储中恢复或正在进行迁移。默认情况下,删除操作会等待主分片一分钟,如果还是不可用,则操作失败并返回一个错误。通过timeout参数可以显示设置超时时间。