elasticsearch RestHighLevelClient 關於document的常用操作 ---------- 刪除篇


es刪除操作大致分為:基於id的單條刪除、基於id的批量刪除、自定義條件的刪除

基於id的單條刪除:DeleteRequest

基於id的批量刪除:BulkRequest中通過多個DeleteRequest來裝載要刪除的數據

自定義條件刪除:

  通過QueryBuilders中的termQuery(等值匹配)、rangeQuery(范圍匹配)、wildcardQuery(模糊匹配)指定搜索條件

  通過QueryBuilders中的boolQuery中的should、must來設置and、or邏輯

  通過DeleteByQueryRequest來構建刪除請求,setQuery來裝載條件,indices來指定索引

  通過deleteByQuery來發起刪除請求(es也是先查詢后刪除)

 

單條刪除:

    //es單條操作--刪除文檔(記錄)
    public String deleteEsDocument(){

        //創建刪除文檔請求
        DeleteRequest request = new DeleteRequest();

        //設置屬性:指定要刪除的索引及id值
        DeleteRequest delete = request.index("user").id("1001");

        try {
            //像es服務發送請求
            DeleteResponse deleteResult = this.client.delete(delete, RequestOptions.DEFAULT);

            System.out.println("delde es index result is : " + delete.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "delete es index is complete";
    }

 

批量刪除:

    //批量刪除(單條件)public String bulkDeleteEsDocument(){

        //獲取數據源
        List<String> list = setTestData();

        //創建批量操作請求
        BulkRequest request = new BulkRequest();

        int size = list.size();
        for(int i=0; i<size; i++){
            request.add(new DeleteRequest().index("user").id(list.get(i)));
        }

        BulkResponse delete = null;
        try {
            delete = this.client.bulk(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(delete.status());
        return "bulk delete es document complete";
    }

    //批量刪除的數據源
    private static List<String> setTestData(){

        List<String> objects = new ArrayList<>();
        objects.add("sAMC7XgBrgVVHTXvmYL_");
        objects.add("Pi6t6ngBdcbzHcXaH_iM");

        return objects;
    }

 

自定義條件刪除:

    //自定義刪除條件
    @RequestMapping("/customDeleteCondition")
    public String customDeleteCondition(){

        //設置刪除條件名字 == 張三
        TermQueryBuilder userNameWhere = QueryBuilders.termQuery("userName.keyword", "張三");

        //設置刪除條件體重》=10 《=100
        RangeQueryBuilder weightRangeWhere = QueryBuilders.rangeQuery("weight");
        weightRangeWhere.gte(10);
        weightRangeWhere.lte(100);

        //設置刪除條件模糊匹配名字中帶t的記錄
        WildcardQueryBuilder userNameWildCardWhere = QueryBuilders.wildcardQuery("userName.keyword",  "*r*");

        //裝載條件並設置must == and  should == or  and、or根據業務需要自行調整
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        queryBuilder.should(userNameWhere);
        queryBuilder.should(weightRangeWhere);
        queryBuilder.should(userNameWildCardWhere);

        DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest();//構建刪除請求
        deleteByQueryRequest.setQuery(queryBuilder);//裝載刪除條件
        deleteByQueryRequest.indices("user");//指定刪除索引

        try {
            this.client.deleteByQuery(deleteByQueryRequest , RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "complete";
    }

 

特殊情況:

  針對map數據類型的自定義條件刪除

  map數據類型在做刪除操作時比較特別須寫全標識,示例中scoure為字段歸屬標識,“數學”為字段名,keyword為分詞,99為值

  個人猜想此處須單獨寫出scoure字段歸屬標識有兩個原因:1.此處刪除操作的條件是完全脫離實體類進行設置的。2.考慮到字段同名問題須特別指出要修改哪個“數學”

    public void mapTestDelete(){

        //map數據類型在做刪除操作時比較特別須寫全標識,示例中scoure為字段標識,“數學”為字段名,keyword為分詞,99為值
        //設置刪除條件並裝載數據
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        queryBuilder.must(QueryBuilders.termQuery("scoure.數學.keyword", "99"));

        DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest();//構建刪除請求
        deleteByQueryRequest.setQuery(queryBuilder);//裝載刪除條件
        deleteByQueryRequest.indices("map_test");//指定刪除索引

        try {
            this.client.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 


免責聲明!

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



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