PS:this.esClient為以配置完成且注入的對象,該隨筆只記錄相應API基本寫法。
根據ES自動生成的_id進行單一刪除:
DeleteResponse response =this.esClient.prepareDelete(INDEX_NAME, INDEX_TYPE, _id).execute().actionGet();
根據查詢結果刪除(filter內可以使用多種查詢):
DeleteByQueryRequestBuilder builder = DeleteByQueryAction.INSTANCE.newRequestBuilder(this.esClient)
.filter(QueryBuilders.matchQuery(字段名, 字段值)).source(INDEX_NAME);
BulkByScrollResponse response2 = builder.get();
long deleted = response2.getDeleted(); //獲得刪除的記錄條數
Bulk為批量操作,使用bulk可減少請求發送的次數,可提高大數量操作效率,但當bulk的條數過多時,會產生相反效果(比如占用大量內存,一次請求占用太多CPU時間...)。
一次bulk具體數量應多方面權衡,找到最佳平衡點。
BulkRequestBuilder bulkRequestBuilder = this.esClient.prepareBulk();
for (POJO pojo: resultList) {
bulkRequestBuilder.add(this.esClient.prepareIndex(INDEX_NAME, INDEX_TYPE).setSource(JSON.toJSONString(pojo), XContentType.JSON));
}
BulkResponse response = bulkRequestBuilder.execute().actionGet();