本节将重点介绍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<DeleteResponse> listener)
上述两个API,一个同步调用,一个异步调用,同步调用方法直接组装DeleteResponse 并返回,而异步方法通过回调ActionListener,并将执行结果(DeleteResponse)传入回调方法。DeleteRequest 需要的请求参数在IndexRequest、GetRequest中都已提及,本节就无需再对其进行分析。
1、Delete API示例
1public static void testDelete() { 2 RestHighLevelClient client = EsClient.getClient(); 3 try { 4 DeleteRequest request = new DeleteRequest("twitter", "_doc", "1"); 5 6 DeleteResponse result = client.delete(request, RequestOptions.DEFAULT); 7 8 System.out.println(result); 9 } catch(Throwable e) { 10 e.printStackTrace(); 11 } finally { 12 EsClient.close(client); 13 } 14}
返回示例:
1{ 2 "_shards" : { 3 "total" : 2, 4 "failed" : 0, 5 "successful" : 1 6 }, 7 "_index" : "twitter", 8 "_type" : "_doc", 9 "_id" : "1", 10 "_version" : 2, 11 "_primary_term": 1, 12 "_seq_no": 5, 13 "result": "deleted" 14}
2、深入Delete API内部实现机制
2.1 版本管理
索引的每个文档都是版本化的。在一个文档上执行的每一个写操作,包括删除,都会导致它的版本增加。被删除的文档的版本号在删除后的短时间内仍然可用,以允许对并发操作进行控制(基于版本的乐观锁控制)。被删除的文档版本保留的时间由配置项index.gc_deletes决定,默认时间为60s。
2.2 自动创建索引
执行一个文档的删除操作,如果索引不存在,默认情况下也会自动创建索引,其创建索引的控制逻辑在《Elasticsearch Document Index API详解、原理与示例》中已详细描述,再次不重复。
其他诸如分布式、Wait For Active Shards、刷新机制、超时机制都在《Elasticsearch Document Index API详解、原理与示例》中详细介绍,故不在此重复。
更多文章请关注微信公众号 中间件兴趣圈,请点击:

本文分享自微信公众号 - 中间件兴趣圈(dingwpmz_zjj)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。