【Elasticsearch】04-RestAPI

1. 引入依赖

java 复制代码
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

2. 覆盖SpringBoot中的版本

需要在父工程里面进行修改,防止版本覆盖。

java 复制代码
  <properties>
      <maven.compiler.source>11</maven.compiler.source>
      <maven.compiler.target>11</maven.compiler.target>
      <elasticsearch.version>7.12.1</elasticsearch.version>
  </properties>

3. 初始化RestHighLevelClient

java 复制代码
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
        HttpHost.create("http://192.168.150.101:9200")
));

4. 创建索引

java 复制代码
    @Test
    void testCreate() {
        // 1. 准备 Request对象
        CreateIndexRequest request = new CreateIndexRequest("items");

        // 2. 准备请求参数
        request.source(MAPPING_TEMPLATE, XContentType.JSON);

        // 3. 发送请求
        try {
            restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

5. Mapping操作

java 复制代码
    @Test
    void testCreate() {
        // 1. 准备 Request对象
        CreateIndexRequest request = new CreateIndexRequest("items");

        // 2. 准备请求参数
        request.source(MAPPING_TEMPLATE, XContentType.JSON);

        // 3. 发送请求
        try {
            restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    void testGet() {
        GetIndexRequest request = new GetIndexRequest("items");
        try {
            // GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
            boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
            System.out.println(exists);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    void testDelete() {
        DeleteIndexRequest request = new DeleteIndexRequest("items");
        try {
            restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

6. 文档操作

java 复制代码
@SpringBootTest(properties = "spring.profiles.active=local")
public class ElasticDocumentTest {
    private RestHighLevelClient client;

    @Resource
    private IItemService itemService;

    @BeforeEach
    public void init() {
        client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://nuaamvp.cn:9200")
        ));
    }

    @AfterEach
    void tearDown() {
        if (client!=null) {
            try {
                client.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

    @Test
    void testIndexDoc() {
        Item item = itemService.getById(317578L);
        ItemDoc itemDoc = BeanUtil.copyProperties(item, ItemDoc.class);
        // 1. 创建对象
        IndexRequest request = new IndexRequest("items").id(itemDoc.getId());

        // 2. 准备请求参数
        request.source(JSONUtil.toJsonStr(itemDoc), XContentType.JSON);
        try {
            // 3. 发送请求
            client.index(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    void testGetDoc() throws IOException {
        // 1. 准备请求对象
        GetRequest request = new GetRequest("items", "317578");
        // 2. 发送请求
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        // 3. 获取响应结果
        String json = response.getSourceAsString();

        ItemDoc itemDoc = JSONUtil.toBean(json, ItemDoc.class);
        System.out.println(itemDoc);
    }

    @Test
    void testDeleteDoc() throws IOException {
        DeleteRequest request = new DeleteRequest("items", "317578");
        client.delete(request, RequestOptions.DEFAULT);
    }

    @Test
    void testUpdateDoc() throws IOException {
        UpdateRequest request = new UpdateRequest("items", "317578");
        request.doc(
                "price", 198,
                "commentCount", 128
        );
        client.update(request, RequestOptions.DEFAULT);
    }
}

7.数据批量导入

java 复制代码
    @Test
    void testLoadItemDocs() throws IOException {
        // 分页查询商品数据
        int pageNo = 1;
        int size = 1000;
        while (true) {
            Page<Item> page = itemService.lambdaQuery().eq(Item::getStatus, 1).page(new Page<Item>(pageNo, size));
            // 非空检验
            List<Item> items = page.getRecords();
            if (CollUtils.isEmpty(items)) {
                return ;
            }
            log.info("加载第{}页数据,共{}条",pageNo, items.size());
            // 1. 创建请求对象
            BulkRequest request = new BulkRequest("items");
            for(Item item:items) {
                // 2.1 itemDoc
                ItemDoc itemDoc = BeanUtil.copyProperties(item, ItemDoc.class);
                request.add(new IndexRequest()
                        .id(itemDoc.getId())
                        .source(JSONUtil.toJsonStr(itemDoc), XContentType.JSON));
            }
            // 3. 发送请求
            client.bulk(request, RequestOptions.DEFAULT);
            // 翻页
            pageNo ++;
        }
    }
相关推荐
瞎胡侃7 小时前
Spark读取Apollo配置
大数据·spark·apollo
悻运7 小时前
如何配置Spark
大数据·分布式·spark
懒惰的橘猫7 小时前
Spark集群搭建之Yarn模式
大数据·分布式·spark
2401_824256867 小时前
Spark-Streaming
大数据·分布式·spark
胡耀超7 小时前
附1:深度解读:《金融数据安全 数据安全分级指南》——数据分类的艺术专栏系列
大数据·金融·数据治理·生命周期·数据分类·政策法规
合新通信 | 让光不负所托7 小时前
【合新通信】浸没式液冷光模块与冷媒兼容性测试技术报告
大数据·网络·光纤通信
元6338 小时前
spark和hadoop之间的对比和联系
大数据·hadoop·spark
秋秋秋秋秋雨8 小时前
linux安装单节点Elasticsearch(es),安装可视化工具kibana
linux·elasticsearch·jenkins
Thomas_YXQ8 小时前
Unity3D IK解算器技术分析
开发语言·搜索引擎·unity·全文检索·unity3d·lucene
cooldream20098 小时前
深入解析大数据的Lambda架构:设计、特点与应用场景
大数据·架构·系统架构师