Elasticsearch系列篇之Delete document

删除一个document

需要指定index,type,id

curl -XDELETE http://localhost:9200/twitter/tweet/1

Routing
当创建index的时候如果指定了routing,那么在删除的时候要同时指定文档的id和routing,如果routing不匹配,光是id匹配也不会删除

curl -XDELETE http://localhost:9200/twitter/tweet/1?routing=user1
按查询条件删除

可以按照查询条件删除,只要是符合条件的document都会被删除,类似于批量删除
参数:_delete_by_query

curl -XPOST http://localhost:9200/_delete_by_query -d'
{
   "query":{
    "match":{
       "message":"some message"
    }
}
'

返回结果

  "took" : 147,
  "timed_out": false,
  "deleted": 119,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1.0,
  "throttled_until_millis": 0,
  "total": 119,
  "failures" : [ ]
}

_delete_by_query 是根据index的快照删除document的,并且使用的是内部的version, 意味着删除时如果刚好index被更新,会引发版本的冲突,所以_delete_by_query 只会删除版本一致的,因为内部版本号不支持0,所以版本是0的document不能被_delete_by_query 删除

删除整个type

POST twitter,blog/tweet,post/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}

上面的请求将会删除tweet,post两个索引的所有type,类似于关系型数据库的删除整张表
设置batch size
默认_delete_by_query 批量删除1000条,可以传递参数scroll_size 修改

POST twitter/_delete_by_query?scroll_size=5000
{
  "query": {
    "term": {
      "user": "kimchy"
    }
  }
}
URL 参数

pretty : 格式化返回内容
refresh: 当delete by query 完成后立即刷新所有的被涉及的分片
wait_for_completion: 当设为false的时候,elasticsearch会做一些预处理,执行这个请求,返回一个task,这个task可以通过task api 来查看状态或者取消,Elasticsearch也会创建一个这个task的document, 在.tasks/task/{<script type="math/tex" id="MathJax-Element-5">{</script>taskId},我们可以保留这个document,不过当执行完成后也可以删除他。
wati_for_active_shards: 指定多少个副本是有效的
timeout: 指定delete的时候等待一个不可用的分片到可用的超时时间
requests_per_second: 指定每秒执行的请求数,-1的时候禁止此阀值

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch 的 Java 客户端中,有一个名为 `org.elasticsearch.client.document.DocumentClient` 的类,用于执行与文档相关的操作。这个类提供了一系列方法,可以用来索引、获取、更新和删除文档。下面是一个简单的示例: ```java import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; public class DocumentExample { private RestHighLevelClient client; public DocumentExample(RestHighLevelClient client) { this.client = client; } public void indexDocument(String index, String id, String json) throws IOException { IndexRequest request = new IndexRequest(index) .id(id) .source(json, XContentType.JSON); IndexResponse response = client.index(request, RequestOptions.DEFAULT); System.out.println(response); } public void getDocument(String index, String id) throws IOException { GetRequest request = new GetRequest(index, id); GetResponse response = client.get(request, RequestOptions.DEFAULT); System.out.println(response); } public void updateDocument(String index, String id, String json) throws IOException { UpdateRequest request = new UpdateRequest(index, id) .doc(json, XContentType.JSON); UpdateResponse response = client.update(request, RequestOptions.DEFAULT); System.out.println(response); } public void deleteDocument(String index, String id) throws IOException { DeleteRequest request = new DeleteRequest(index, id); DeleteResponse response = client.delete(request, RequestOptions.DEFAULT); System.out.println(response); } } ``` 以上示例展示了如何使用 `DocumentClient` 类来执行索引、获取、更新和删除文档的操作。你可以根据自己的需求调用这些方法,并根据需要处理相应的响应。请注意,需要先创建一个 `RestHighLevelClient` 实例,并将其传递给 `DocumentExample` 的构造函数中,以便与 Elasticsearch 集群进行交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值