初见RestClient并熟悉其基本操作

一、RestClient

1.1 初识RestClient

  RestClient是一个用于测试和调试RESTful API的工具,它可以作为浏览器的插件或独立应用程序使用。使用RestClient,您可以轻松地发送HTTP请求并检查响应,以确保API按预期工作。您可以设置请求的各种参数,例如HTTP方法、请求头、请求体和URL参数等。它还支持OAuth1、OAuth2、Basic Auth和Digest Auth等身份验证方法,并且可以显示响应的HTTP状态码、标头和响应正文等信息。RestClient是一个非常方便的工具,可以帮助开发人员快速、准确地测试和调试RESTful API。

1.2 基本操作

1.2.1 分析数据结构

  mapping要考虑的问题:字段名、数据类型、是否参与搜索、是否分词、如果分词,分词器是什么;

PUT /hotel
{
  "mappings": {
    "properties": {
      "字段名": {
        "type": "数据类型",
        # 是否参与搜索
        "index": false,
        # 如果不需要分词则不写analyzer
        "analyzer": "分词器",
        # 如果参与联合搜索添加copy_to字段,
        "copy_to": "指定字段"
      },
      # 联合字段
      "all":{
        "type": "text",
        "analyzer": "分词器"
      }
    }
  }
}

1.2.2 初始化JavaRestClient

  • 引入es的RestHighLevelClient依赖
<!--elasticsearch依赖-->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.12.1</version>
</dependency>
  • 覆盖默认es版本
<properties>
    <java.version>1.8</java.version>
    <elasticsearch.version>7.12.1</elasticsearch.version> </properties>
  • 初始化RestHighLevelClient:
RestHighLevelClient client = new RestHighLevelClient(
    RestClient.builder(
    	HttpHost.create("http://IP地址:9200")
    )
);

1.2.3 操作索引库

  1. 创建索引库
//创建RestHighLevelClient对象
private RestHighLevelClient client;
@Test
void testCreateHotelIndex() throws IOException {
    //初始化RestHighLevelClient
    this.client = new RestHighLevelClient(RestClient.builder(
    	HttpHost.create("http://IP地址:9200")
    ));
    // 1.创建Request对象
    CreateIndexRequest request = new CreateIndexRequest("索引库名称");
    // 2.请求参数
    //source第一个参数是创建索引库的DSL语句,第二个参数是指定数据类型
    //XContentType.JSON指定数据类型为JSON
    request.source("", XContentType.JSON);
    // 3.发起请求
    //indices索引库操作
    //create(request对象, 请求参数)创建操作
    client.indices().create(request, RequestOptions.DEFAULT);
    //关闭RestHighLevelClient
    this.client.close();
}
  1. 查询索引库
//创建RestHighLevelClient对象
private RestHighLevelClient client;
@Test
void testExistsHotelIndex() throws IOException {
    //初始化RestHighLevelClient
    this.client = new RestHighLevelClient(RestClient.builder(
    	HttpHost.create("http://IP地址:9200")
    ));
    // 1.创建Request对象
    GetIndexRequest request = new GetIndexRequest("索引库名称");
    // 2.发起请求
    //indices索引库操作
    //exists(request对象, 请求参数)存在量词,返回值为布尔值
    boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
    //3. 输出结果
    System.out.println(exists);
    //关闭RestHighLevelClient
    this.client.close();
}
  1. 删除索引库
//创建RestHighLevelClient对象
private RestHighLevelClient client;
@Test
void testExistsHotelIndex() throws IOException {
    //初始化RestHighLevelClient
    this.client = new RestHighLevelClient(RestClient.builder(
    	HttpHost.create("http://IP地址:9200")
    ));
    // 1.创建Request对象
    DeleteIndexRequest request = new DeleteIndexRequest("索引库名称");
    // 2.发起请求
    //indices索引库操作
    //delete(request对象, 请求参数)删除操作
    client.indices().delete(request, RequestOptions.DEFAULT);
    //关闭RestHighLevelClient
    this.client.close();
}
  1. 优化

因为每次都要进行初始化和关闭RestHighLevelClient的操作,可以通过@BeforeEach和@AfterEach注解在每个方法执行前后添加操作,例如:

private RestHighLevelClient client;
@BeforeEach
void setUp() {
    this.client = new RestHighLevelClient(RestClient.builder(
            HttpHost.create("http://IP地址:9200")
    ));
}
@AfterEach
void tearDown() throws IOException {
    this.client.close();
}

1.2.4 操作文档

  1. 新增文档
@Test
void testAddDocument() throws IOException {
    //sql中的酒店实体类
    Hotel hotel = hotelService.getById(字段ID);
    //es中的酒店实体类
    HotelDoc hotelDoc = new HotelDoc(索引库名称);
    //1.准备Request对象
    IndexRequest request = new IndexRequest("索引库名称").id(hotel.getId().toString());
    //2.准备JSON文档
    request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);
    //3.发送请求
    client.index(request,RequestOptions.DEFAULT);
}
  1. 根据id查询文档
@Test
void testGetDocumentById() throws IOException {
    //1.创建request对象
    GetRequest request = new GetRequest("索引库名称","字段ID");
    //2.发送请求,得到结果
    GetResponse response = client.get(request,RequestOptions.DEFAULT);
    //3.解析结果
    //getSourceAsString():转换成字符串
    String json = response.getSourceAsString();
    //4.反序列化
    //parseObject(数据,实体类.class);
    HotelDoc hotelDoc = JSON.parseObject(json,HotelDoc.class);
    //5.打印结果
    System.out.println(hotelDoc);
}
  1. 更新文档
@Test
void testUpdateDocumentById() throws IOException {
    //1.创建request对象
    UpdateRequest request = new UpdateRequest("索引库名","字段ID");
    //2.准备参数,每2个参数为一对 key value
    request.doc(
    	"属性名","属性值"
    );
    //3.更新文档
    client.update(request,RequestOptions.DEFAULT);
}
  1. 删除文档
void testDeleteDocumentById() throws IOException {
    //1.创建request对象
    DeleteRequest request = new DeleteRequest("索引库名","字段ID");
    //2.发送请求,删除对象
    client.delete(request,RequestOptions.DEFAULT);
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jc_caterpillar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值