ElasticSearch 7.6.1 集成SpringBoot Document所有操作(无废话版)--------------------------------------------(六)

该博客详细介绍了如何使用 Elasticsearch 的 RestHighLevelClient 进行索引创建、文档增删改查、批量操作、更新查询以及删除操作。示例代码涵盖 IndexRequest、GetRequest、DeleteRequest、UpdateRequest、BulkRequest 等关键 API,为理解 Elasticsearch 数据操作提供实践指导。
摘要由CSDN通过智能技术生成

代码地址:(https://github.com/heidaodageshiwo/ElasticSearch7.6.1.git

 

package com.zhangqtest.zhangqiang;

import com.alibaba.fastjson.JSON;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.*;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.replication.ReplicationResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.elasticsearch.index.reindex.ReindexRequest;
import org.elasticsearch.index.reindex.UpdateByQueryRequest;
import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;

/**
 * @PackageName com.zhangqtest.zhangqiang
 * @ClassName ZhangqiangDocumenttest
 * @Description TODO
 * @Author zhangqiang
 * @Date 2020/9/27 8:44
 * @Version 1.0
 **/
@RestController
@RequestMapping("/zhangqiangdocument")
public class ZhangqiangDocumenttest {

  @Autowired
  private RestHighLevelClient restHighLevelClient;


  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName IndexReques
   * @Description 创建文档
   * @Author zhangqiang
   * @Date 2020/9/27 9:59
   * @Param []
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/IndexRequest
  @RequestMapping("/IndexRequest")
  public String IndexReques() throws IOException {
    //新添加一个索引
       /* CreateIndexRequest zqtest = new CreateIndexRequest("zqtest");
        zqtest.settings(Settings.builder().put("index.number_of_shards",5));
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(zqtest, RequestOptions.DEFAULT);
        System.out.println("创建索引是否成功:"+createIndexResponse.isAcknowledged());
*/

    IndexRequest indexRequest = new IndexRequest("zqtest");
    //map方式插入数据
  /*      HashMap<String, Object> stringObjectHashMap = new HashMap<>();
        stringObjectHashMap.put("age",11);
        stringObjectHashMap.put("name","张强");
        //可以指定id,也可以不指定
        indexRequest.id("1");
        indexRequest.source(stringObjectHashMap);*/
    //直接插入方式
    //indexRequest.source("age",12,"name","张强12");
    //json数据插入方式
    User user = new User(14, "张强14");
    System.out.println(JSON.toJSONString(user));
    indexRequest.source(JSON.toJSONString(user), XContentType.JSON);

    indexRequest.timeout("5s");
    indexRequest.timeout(TimeValue.timeValueSeconds(5));
    IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
    String index = indexResponse.getIndex();
    System.out.println("创建文档成功后获取索引名称:" + index);

    String id = indexResponse.getId();
    System.out.println("创建文档成功后获取文档id:" + id);

    DocWriteResponse.Result indexResponseResult = indexResponse.getResult();
    if (indexResponseResult == DocWriteResponse.Result.CREATED) {
      System.out.println("这个是创建文档的操作");
    } else if (indexResponseResult == DocWriteResponse.Result.DELETED) {
      System.out.println("这个是删除文档的操作");
    } else if (indexResponseResult == DocWriteResponse.Result.UPDATED) {
      System.out.println("这个是更新文档的操作");
    } else if (indexResponseResult == DocWriteResponse.Result.NOT_FOUND) {
      System.out.println("这个是没有发现文档的操作");
    } else if (indexResponseResult == DocWriteResponse.Result.NOOP) {
      System.out.println("我也不知道这是什么操作");
    }

    ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
    if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
      //处理分片故障
    }
    //处理分片故障
    if (shardInfo.getFailed() > 0) {
      for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures()) {
        String reason = failure.reason();
        System.out.println(reason);
      }
    }

    return "11111111111111111111111";
  }

  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName GetRequest
   * @Description 获取文档
   * @Author zhangqiang
   * @Date 2020/9/27 9:59
   * @Param [ids]
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/GetRequest/1
  @RequestMapping("/GetRequest/{ids}")
  public String GetRequest(@PathVariable("ids") String ids) throws IOException {
    GetRequest zqtest = new GetRequest("zqtest", ids);
    GetResponse getResponse = restHighLevelClient.get(zqtest, RequestOptions.DEFAULT);
    String index = getResponse.getIndex();
    System.out.println(index);
    String id = getResponse.getId();
    System.out.println(id);
    if (getResponse.isExists()) {
      //文档存在
      System.out.println("文档存在");
      long version = getResponse.getVersion();
      System.out.println("version:" + version);
      String sourceAsString = getResponse.getSourceAsString();
      System.out.println("sourceAsString:" + sourceAsString);
      Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
      System.out.println("sourceAsMap:" + sourceAsMap);
      byte[] sourceAsBytes = getResponse.getSourceAsBytes();
      System.out.println("sourceAsBytes:" + sourceAsBytes);

    } else {
      //不存在
      System.out.println("不存在");
    }

    return "11111111111111111111111";
  }

  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName ExistsRequest
   * @Description 判断文档是否存在
   * @Author zhangqiang
   * @Date 2020/9/27 10:00
   * @Param [ids]
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/ExistsRequest/1
  @RequestMapping("/ExistsRequest/{ids}")
  public String ExistsRequest(@PathVariable("ids") String ids) throws IOException {
    GetRequest zqtest = new GetRequest("zqtest", ids);
    boolean exists = restHighLevelClient.exists(zqtest, RequestOptions.DEFAULT);
    System.out.println(exists);

    return "11111111111111111111111";
  }

  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName DeleteRequest
   * @Description 删除文档
   * @Author zhangqiang
   * @Date 2020/9/27 10:25
   * @Param [ids]
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/DeleteRequest/1
  @RequestMapping("/DeleteRequest/{ids}")
  public String DeleteRequest(@PathVariable("ids") String ids) throws IOException {
    DeleteRequest zqtest = new DeleteRequest("zqtest", ids);
    DeleteResponse deleteResponse = restHighLevelClient.delete(zqtest, RequestOptions.DEFAULT);
    System.out.println(deleteResponse.status());

    return "11111111111111111111111";
  }


  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName UpdateRequest
   * @Description 更新文档
   * @Author zhangqiang
   * @Date 2020/9/27 10:38
   * @Param [ids]
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/UpdateRequest/1
  @RequestMapping("/UpdateRequest/{ids}")
  public String UpdateRequest(@PathVariable("ids") String ids) throws IOException {
    UpdateRequest zqtest = new UpdateRequest("zqtest", ids);
    User user = new User(111, "333333333333333333333333333333333333");
    zqtest.doc(JSON.toJSONString(user), XContentType.JSON);
    UpdateResponse updateResponse = restHighLevelClient.update(zqtest, RequestOptions.DEFAULT);
    System.out.println(updateResponse.status());

    if (updateResponse.getResult() == DocWriteResponse.Result.CREATED) {
      System.out.println("创建文档");
    } else if (updateResponse.getResult() == DocWriteResponse.Result.UPDATED) {
      System.out.println("更新文档");
    } else if (updateResponse.getResult() == DocWriteResponse.Result.DELETED) {
      System.out.println("删除文档");
    } else if (updateResponse.getResult() == DocWriteResponse.Result.NOOP) {
      System.out.println("没有操作文档");
    }

    return "11111111111111111111111";
  }

  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName BulkRequest
   * @Description 批量增加
   * @Author zhangqiang
   * @Date 2020/9/27 14:12
   * @Param []
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/BulkRequest
  @RequestMapping("/BulkRequest")
  public String BulkRequest() throws IOException, InterruptedException {
    BulkRequest bulkRequest = new BulkRequest();

    ArrayList<User> userArrayList = new ArrayList<>();
    userArrayList.add(new User(31, "张强31"));
    userArrayList.add(new User(32, "张强32"));
    userArrayList.add(new User(33, "张强33"));
    userArrayList.add(new User(34, "张强34"));
    userArrayList.add(new User(35, "张强35"));
    userArrayList.add(new User(36, "张强36"));
    userArrayList.add(new User(37, "张强37"));

       /* for(int i=0;i<userArrayList.size();i++){
            bulkRequest.add(new IndexRequest("zqtest").id(i+"====").source(JSON.toJSONString(userArrayList.get(i)),XContentType.JSON));
        }*/
    for (int i = 0; i < 100000; i++) {
      bulkRequest.add(new IndexRequest("zqtest")
          .source(JSON.toJSONString(userArrayList.get(2)), XContentType.JSON));
    }


        /* for(int i=0;i<userArrayList.size();i++){
            bulkRequest.add(new IndexRequest("zqtest5").id(i+"====").source(JSON.toJSONString(userArrayList.get(i)),XContentType.JSON));
        }*/
//        bulkRequest.timeout(TimeValue.timeValueHours(1));
    bulkRequest.timeout(TimeValue.timeValueHours(1));
//        bulkRequest.timeout("1s");
    BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
    System.out.println("执行了此请求");
    boolean b = bulkResponse.hasFailures();
    for (BulkItemResponse bulkItemResponse : bulkResponse) {
      if (bulkItemResponse.isFailed()) {
        BulkItemResponse.Failure failure = bulkItemResponse.getFailure();
        System.out.println(failure);
        System.out.println(JSON.toJSON(failure));
        System.out.println(JSON.toJSON(failure.getCause()));
        System.out.println(JSON.toJSON(failure.getMessage()));
      }
    }

    System.out.println("是否失败:" + b);

    return "11111111111111111111111";
  }


  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName BulkRequest
   * @Description 批量增加与修改与删除
   * @Author zhangqiang
   * @Date 2020/9/27 14:12
   * @Param []
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/BulkadddeleteupdateRequest
  @RequestMapping("/BulkadddeleteupdateRequest")
  public String BulkadddeleteupdateRequest() throws IOException, InterruptedException {
    BulkRequest bulkRequest = new BulkRequest();
    ArrayList<User> userArrayList = new ArrayList<>();
    userArrayList.add(new User(31, "张三31"));
    userArrayList.add(new User(32, "李四32"));
    userArrayList.add(new User(33, "王五33"));
    userArrayList.add(new User(34, "小娃儿34"));
    userArrayList.add(new User(35, "小二35"));
    userArrayList.add(new User(36, "小三36"));
    userArrayList.add(new User(37, "小四37"));
    userArrayList.add(new User(38, "好的38"));
    userArrayList.add(new User(39, "五啊啊啊39"));
    userArrayList.add(new User(40, "张明40"));
    userArrayList.add(new User(41, "李丽丽41"));
    userArrayList.add(new User(42, "拜把42"));

    bulkRequest.timeout(TimeValue.timeValueMinutes(2));
    //1先增加数据
    for (int i = 0; i < userArrayList.size(); i++) {
      bulkRequest.add(new IndexRequest("zqtest1")
          .source(JSON.toJSONString(userArrayList.get(i)), XContentType.JSON));
    }
        /*//删除3条数据,更新一条数据
        bulkRequest.add(new DeleteRequest("zqtest1").id("pA82znQBwVtjHGNcf9VT"));
        bulkRequest.add(new DeleteRequest("zqtest1").id("pQ82znQBwVtjHGNcf9VT"));
        bulkRequest.add(new DeleteRequest("zqtest1").id("pg82znQBwVtjHGNcf9VT"));
        bulkRequest.add(new UpdateRequest("zqtest1","pw82znQBwVtjHGNcf9VT").doc(JSON.toJSONString(new User(6666,"66666")),XContentType.JSON));
*/
    BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
    System.out.println("是否失败:" + bulkResponse.hasFailures());
    return "11111111111111111111111";
  }


  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName MultiGetRequest
   * @Description 多个请求的get
   * @Author zhangqiang
   * @Date 2020/9/27 14:34
   * @Param []
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/MultiGetRequest
  @RequestMapping("/MultiGetRequest")
  public String MultiGetRequest() throws IOException, InterruptedException {
    MultiGetRequest multiGetRequest = new MultiGetRequest();
    multiGetRequest.add(new MultiGetRequest.Item("zqtest1", "pw82znQBwVtjHGNcf9VT"));
    multiGetRequest.add(new MultiGetRequest.Item("zqtest1", "qg82znQBwVtjHGNcf9VT"));
    MultiGetResponse mget = restHighLevelClient.mget(multiGetRequest, RequestOptions.DEFAULT);
    MultiGetItemResponse[] responsess = mget.getResponses();
    for (MultiGetItemResponse response : responsess) {
      MultiGetResponse.Failure failure = response.getFailure();
      System.out.println("是否获取失败:" + failure);
      String index = response.getIndex();
      String id = response.getId();
      System.out.println("index:" + index);
      System.out.println("id:" + id);
      GetResponse response1 = response.getResponse();
      if (response1.isExists()) {
        String sourceAsString = response1.getSourceAsString();
        Map<String, Object> sourceAsMap = response1.getSourceAsMap();
        byte[] sourceAsBytes = response1.getSourceAsBytes();
        System.out.println("sourceAsString:" + sourceAsString);
        System.out.println("sourceAsMap:" + sourceAsMap);
        System.out.println("sourceAsBytes:" + sourceAsBytes);
      } else {

      }

    }
    return "11111111111111111111111";
  }


  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName ReindexRequest
   * @Description 复制索引里面的文档
   * @Author zhangqiang
   * @Date 2020/9/27 14:55
   * @Param []
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/ReindexRequest
  @RequestMapping("/ReindexRequest")
  public String ReindexRequest() throws IOException, InterruptedException {
    CreateIndexRequest zqtest2 = new CreateIndexRequest("zqtest2");
    restHighLevelClient.indices().create(zqtest2, RequestOptions.DEFAULT);
    ReindexRequest reindexRequest = new ReindexRequest();
    reindexRequest.setSourceIndices("zqtest1");
    reindexRequest.setDestIndex("zqtest2");
    BulkByScrollResponse reindex = restHighLevelClient
        .reindex(reindexRequest, RequestOptions.DEFAULT);
    System.out.println(reindex.getTotal());
    return "11111111111111111111111";
  }


  /***
   *@ClassName ZhangqiangDocumenttest
   *@MethodName UpdateByQueryRequest
   *@Description 通过查询出来的结果进行批量的更新
   *@Author zhangqiang
   *@Date 2020/9/27 15:16
   *@Param []
   *@Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/UpdateByQueryRequest
  @RequestMapping("/UpdateByQueryRequest")
  public String UpdateByQueryRequest() throws IOException, InterruptedException {
    UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest("zqtest2");
    updateByQueryRequest.setQuery(new TermQueryBuilder("age", "36"));
    //此处需要注意 我这里age==36  age是int类型 用==
    Script script = new Script(ScriptType.INLINE, "painless",
        " if(ctx._source.age==36){ctx._source.name='修改后姓名'} ", Collections.emptyMap());
    updateByQueryRequest.setScript(script);
    BulkByScrollResponse bulkByScrollResponse = restHighLevelClient
        .updateByQuery(updateByQueryRequest, RequestOptions.DEFAULT);
    System.out.println(bulkByScrollResponse.getTotal());
    long updated = bulkByScrollResponse.getUpdated();
    System.out.println(updated);
    return "11111111111111111111111";
  }


  /**
   * @ClassName ZhangqiangDocumenttest
   * @MethodName DeleteByQueryRequest
   * @Description 通过查询出来的数据进行批量的删除
   * @Author zhangqiang
   * @Date 2020/9/27 17:21
   * @Param []
   * @Return java.lang.String
   **/
  //  http://localhost:8080/zhangqiangdocument/DeleteByQueryRequest
  @RequestMapping("/DeleteByQueryRequest")
  public String DeleteByQueryRequest() throws IOException, InterruptedException {
    DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest("zqtest2");
    deleteByQueryRequest.setQuery(new TermQueryBuilder("age", "38"));
    BulkByScrollResponse bulkByScrollResponse = restHighLevelClient
        .deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT);
    System.out.println(bulkByScrollResponse.getTotal());
    long updated = bulkByScrollResponse.getUpdated();
    System.out.println(updated);
    return "11111111111111111111111";
  }

    /*//  http://localhost:8080/zhangqiangdocument/MultiTermVectorsRequest
    @RequestMapping("/MultiTermVectorsRequest")
    public String MultiTermVectorsRequest() throws IOException {

        MultiTermVectorsRequest termVectorsRequests = new MultiTermVectorsRequest();
        TermVectorsRequest termVectorsRequest = new TermVectorsRequest("zqtest2","_doc","tQ9AznQBwVtjHGNcytU5");
        termVectorsRequest.set
//        MultiTermVectorsRequest add = termVectorsRequests.add("zqtest2", null, "tQ9AznQBwVtjHGNcytU5");


        return "11111111111111111111111";
    }*/


  public static class User {

    private int age;
    private String name;

    public int getAge() {
      return age;
    }

    public void setAge(int age) {
      this.age = age;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public User(int age, String name) {
      this.age = age;
      this.name = name;
    }
  }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值