elasticsearch使用指南之Elasticsearch Document Delete API详解、原理与示例
作者简介:《RocketMQ技术内幕》作者,中间件兴趣圈公众号 维护者。
本节将重点介绍ElasticSearch Doucment Delete API(根据ID删除文档)。
从《ElasticSearch Client详解》可知,ElasticSearch Delete Rest Hign level Delete Api声明如下:
- public final DeleteResponse delete(DeleteRequest deleteRequest, RequestOptions options) throws IOException
- public final void deleteAsync(DeleteRequest deleteRequest, RequestOptions options, ActionListener listener)
上述两个API,一个同步调用,一个异步调用,同步调用方法直接组装DeleteResponse 并返回,而异步方法通过回调ActionListener,并将执行结果(DeleteResponse)传入回调方法。DeleteRequest 需要的请求参数在IndexRequest、GetRequest中都已提及,本节 就无需再对其进行分析。
1、Delete API示例
public static void testDelete() {
RestHighLevelClient client = EsClient.getClient();
try {
DeleteRequest request = new DeleteRequest("twitter", "_doc", "1");
DeleteResponse result = client.delete(request, RequestOptions.DEFAULT);
System.out.println(result);
} catch(Throwable e) {
e.printStackTrace();
} finally {
EsClient.close(client);
}
}
返回示例:
{
"_shards" : {
"total" : 2,
"failed" : 0,
"successful" : 1
},
"_index" : "twitter",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"_primary_term": 1,
"_seq_no": 5,
"result": "deleted"
}
2、深入Delete API内部实现机制
2.1 版本管理
索引的每个文档都是版本化的。在一个文档上执行的每一个写操作,包括删除,都会导致它的版本增加。被删除的文档的版本号在删除后的短时间内仍然可用,以允许对并发操作进行控制(基于版本的乐观锁控制)。被删除的文档版本保留的时间由配置项index.gc_deletes决定,默认时间为60s。
2.2 自动创建索引
执行一个文档的删除操作,如果索引不存在,默认情况下也会自动创建索引。其他诸如分布式、Wait For Active Shards、刷新机制、超时机制都在《Elasticsearch Document Index API详解、原理与示例》中已详细描述,再次不重复。
更多关于中间件相关的文章请关照微信公众号:
一波广告来袭:作者新书《RocketMQ技术内幕》上市啦:
《RocketMQ技术内幕》已出版上市,目前可在主流购物平台(京东、天猫等)购买,本书从源码角度深度分析了RocketMQ NameServer、消息发送、消息存储、消息消费、消息过滤、主从同步HA、事务消息;在实战篇重点介绍了RocketMQ运维管理界面与当前支持的39个运维命令;并在附录部分罗列了RocketMQ几乎所有的配置参数。本书得到了RocketMQ创始人、阿里巴巴Messaging开源技术负责人、Linux OpenMessaging 主席的高度认可并作序推荐。目前是国内第一本成体系剖析RocketMQ的书籍。
高大上的宣传海报如下: