es之java刪除文檔操作


刪除文檔操作

@Test
public void deleteDocument(){
    DeleteResponse response = client.prepareDelete("twitter4", "tweet", "1").get();
    // 索引名稱
    String _index = response.getIndex();
    // 類型
    String _type = response.getType();
    // 文檔ID
    String _id = response.getId();
    // 版本
    long _version = response.getVersion();
    // 返回的操作狀態
    RestStatus status = response.status();
    System.out.println("索引名稱:"+_index+" "+"類型 :" +  _type + " 文檔ID:"+_id+" 版本 :"+_version+" 返回的操作狀態:"+status);
}

2:通過查詢的方式刪除

往往生產的需求是能夠類似mysql一樣,通過查詢出符合條件的數據進行刪除:

比如mysql:

DELETE FROM Employees WHERE ps_code= 
(SELECT ps_code 不存在 FROM Employees WHERE ps_code NOT IN `icq_user_info``persons`
(SELECT ps_code FROM Persons));

那么es也是支持這種操作的:DeleteByQueryAction允許檢索一個索引,把匹配出來的字段刪除

@Test
public void queryDeleteDocument(){
    BulkByScrollResponse response =
            DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
                    .filter(QueryBuilders.matchQuery("user", "tom"))//key -- value
                    .source("twitter4")//索引名稱
                    .get();

    long deleted = response.getDeleted();
    System.out.println("總共刪除時間:"+deleted);
}

3: 優化-通過查詢進行刪除

上面的查詢刪除,在實際的生產中會占用大量的時間,所以為了不阻塞其他的操作,應該把上面的操作變成異步執行方式

/**
 * 優化--異步的方式執行
 * */
@Test
public void tuningqueryDeleteDocument(){
    DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
            .filter(QueryBuilders.matchQuery("user", "kimchy"))
            .source("twitter4")
            .execute(new ActionListener<BulkByScrollResponse>() {
                public void onResponse(BulkByScrollResponse response) {
                    long deleted = response.getDeleted();
                    System.out.println("總共刪除時間:"+deleted);//因為是異步執行,所以不會打印
                }
                public void onFailure(Exception e) {
                    System.out.println("程序運行出錯");
                }

            });

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM