IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> JavaRestClient实现文档的CRUD -> 正文阅读

[大数据]JavaRestClient实现文档的CRUD

  1. 初始化JavaRestClient
    略,与上一篇一致

  2. 创建代码
    通过注入service查询出数据库中数据
    将查询出来的bean转换成es能保存的bean(如坐标等)
    创建indexRequest,通过指定索引,指定ID
    准备Json文档
    发送请求

package com.yy.hotel;

import com.alibaba.fastjson.JSON;
import com.yy.hotel.pojo.Hotel;
import com.yy.hotel.pojo.HotelDoc;
import com.yy.hotel.service.IHotelService;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;

import static com.yy.hotel.constants.HotelConstants.MAPPING_TEMPLATE;

@SpringBootTest
public class HotelDocumentTest {
    @Autowired
    private IHotelService hotelService;


    private RestHighLevelClient restHighLevelClient;

    @Test
    void testInit(){
        System.out.println(restHighLevelClient);
    }



    @Test
    void testAddDocument() throws IOException {
//        id根据注入的service查询数据库获取
        Hotel hotel = hotelService.getById(36934L);
//        转换为文档类型,由于索引库与数据库的表有细微差别,所以多加了一个HotelDoc用于转换
        HotelDoc hotelDoc = new HotelDoc(hotel);

//        1.创建Request对象,索引库中对ID要求都是字符串,所以要toString
        IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());
//        2.准备json部分,将对象转换成json
        request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);
        restHighLevelClient.index(request, RequestOptions.DEFAULT);

    }


//    每个单元测试中都会用,所以定义成成员变量
//    同时提交完成变更初始化就使用@BeforeEach
    @BeforeEach
    void setUp(){
        this.restHighLevelClient = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.0.106:9200")
        ));
    }



//    测试完成销毁
    @AfterEach
    void tearDown() throws IOException {
        this.restHighLevelClient.close();
    }
}

可在kibana中进行验证

GET /hotel/_doc/36934

查询文档

package com.yy.hotel;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yy.hotel.pojo.Hotel;
import com.yy.hotel.pojo.HotelDoc;
import com.yy.hotel.service.IHotelService;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;

import static com.yy.hotel.constants.HotelConstants.MAPPING_TEMPLATE;

@SpringBootTest
public class HotelDocumentTest {
    @Autowired
    private IHotelService hotelService;


    private RestHighLevelClient restHighLevelClient;

    @Test
    void testInit(){
        System.out.println(restHighLevelClient);
    }





    @Test
    void testGetDocument() throws IOException {

//        1.创建Request对象,指定索引与ID
        GetRequest request = new GetRequest("hotel","36934");
//        2.发送请求
        GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
//        3.解析响应结果
        String json = response.getSourceAsString();

        HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
        System.out.println(hotelDoc);

    }


//    每个单元测试中都会用,所以定义成成员变量
//    同时提交完成变更初始化就使用@BeforeEach
    @BeforeEach
    void setUp(){
        this.restHighLevelClient = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.0.106:9200")
        ));
    }




//    测试完成销毁
    @AfterEach
    void tearDown() throws IOException {
        this.restHighLevelClient.close();
    }
}


在这里插入图片描述
更新文档
同样也有局部更新和全量更新
只演示局部更新

package com.yy.hotel;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yy.hotel.pojo.Hotel;
import com.yy.hotel.pojo.HotelDoc;
import com.yy.hotel.service.IHotelService;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;

import static com.yy.hotel.constants.HotelConstants.MAPPING_TEMPLATE;

@SpringBootTest
public class HotelDocumentTest {
    @Autowired
    private IHotelService hotelService;


    private RestHighLevelClient restHighLevelClient;

    @Test
    void testInit(){
        System.out.println(restHighLevelClient);
    }

    @Test
    void testUpdateDocument() throws IOException {

//        1.创建Request对象,指定索引与id
        UpdateRequest request = new UpdateRequest("hotel", "36934");

//        2.准备请求参数
        request.doc(
                "price","250"
        );
//        3.发送请求
        restHighLevelClient.update(request, RequestOptions.DEFAULT);


    }


//    每个单元测试中都会用,所以定义成成员变量
//    同时提交完成变更初始化就使用@BeforeEach
    @BeforeEach
    void setUp(){
        this.restHighLevelClient = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.0.106:9200")
        ));
    }






//    测试完成销毁
    @AfterEach
    void tearDown() throws IOException {
        this.restHighLevelClient.close();
    }
}

删除文档

@Test
    void testDeleteDocument() throws IOException {

//        1.创建Request对象,指定索引与id
        DeleteRequest request = new DeleteRequest("hotel", "36934");

//        2.发送请求
        restHighLevelClient.delete(request, RequestOptions.DEFAULT);


    }

批量导入数据

  1. 利用mybatis-plus查询多条数据。
  2. 将数据hotel转换为文档类型格式。
  3. 利用javaRestClient的Bluk批处理,实现批量新增文档,示例代码如下:
@Test
    void testBulkDocument() throws IOException {
//        数据库中批量查询数据
        List<Hotel> hotels = hotelService.list();

//        1.创建Request对象
        BulkRequest request = new BulkRequest();
//        2.准备参数,添加多个新增Request
        //        转换为文档类型
        for (Hotel hotel : hotels) {
            HotelDoc hotelDoc = new HotelDoc(hotel);
//            创建新增文档的Request对象
            request.add(new IndexRequest("hotel")
                    .id(hotelDoc.getId().toString())
                    .source(JSON.toJSONString(hotelDoc),XContentType.JSON));
        }
//        3.发送请求
        restHighLevelClient.bulk(request, RequestOptions.DEFAULT);


在kibana中查询索引中所有值,判定是否都批量添加成功

GET /hotel/_search
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:49:12  更:2021-12-23 15:51:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:43:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码