JavaRestClient 客户端初始化+索引库操作

1. 介绍

ES官方提供了各种不同语言的客户端 ,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。

Elasticsearch目前最新版本是8.0,其java客户端有很大变化。不过大多数企业使用的还是8以下版本


2. 客户端初始化

在elasticsearch提供的API中,与elasticsearch一切交互都封装在一个名为**RestHighLevelClient的类中,必须先完成这个对象的初始化** ,建立与elasticsearch的连接

下面就使用黑马商城作为示例进行一个改造

2.1 步骤

2.1.1 导入依赖

在item-service商品模块导入该依赖

代码如下:

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

2.1.2 覆盖SpringBoot默认的ES版本

父工程hmall 进行修改,由于SpringBoot 默认的ES版本是**7.17.10**,所以我们需要覆盖默认的ES版本

properties 标签中添加elasticsearch-version7.12.1版本


2.1.3 初始化RestHighLevelClient

写一个单元测试进行连接

写三个方法,分别是初始化、结束、测试连接方法

快捷键生成:按下Alt+Insert生成以上三个方法


启动测试连接方法


3. 索引库操作

在之前写的单元测试中进行索引库操作

代码如下:

java 复制代码
package com.hmall.item.es;

import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
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 java.io.IOException;

/*
RestHighLevelClient 客户端初始化  索引库操作 增删查测试
*/
public class ElasticIndexTest {
    private RestHighLevelClient client;

    // 测试连接
    @Test
    void testConnection() {
        System.out.println("client=" + client);
    }

    // 初始化方法
    @BeforeEach
    void setUp() {
        client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.115.15:9200")));
    }

    //结束方法
    @AfterEach
    void tearDown() throws IOException {
        if (client != null) {
            client.close();
        }
    }

    //创建索引库
    @Test
    void testCreateIndex() throws IOException {
        //1. 准备Request对象
        CreateIndexRequest request = new CreateIndexRequest("items");
        //2. 准备请求参数
        request.source(MAPPING_TEMPLATE, XContentType.JSON);
        //3. 发送请求
        client.indices().create(request, RequestOptions.DEFAULT);
    }

    // 查询索引库是否存在
    @Test
    void testGetIndex() throws IOException {
        //1. 准备Request对象
        GetIndexRequest request = new GetIndexRequest("items");
        //2. 发送请求
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println("exists======================" + exists);
    }

    //删除索引库
    @Test
    void testDeleteIndex() throws IOException {
        //1. 准备Request对象
        DeleteIndexRequest request = new DeleteIndexRequest("items");
        //2. 发送请求
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println("delete------------------------->" + delete.isAcknowledged());
    }


    // 索引库映射
    private static final String MAPPING_TEMPLATE = "{\n" +
            "  \"mappings\": {\n" +
            "    \"properties\": {\n" +
            "      \"id\": {\n" +
            "        \"type\": \"keyword\"\n" +
            "      },\n" +
            "      \"name\": {\n" +
            "        \"type\": \"text\",\n" +
            "        \"analyzer\": \"ik_smart\"\n" +
            "      },\n" +
            "      \"price\": {\n" +
            "        \"type\": \"integer\"\n" +
            "      },\n" +
            "      \"image\": {\n" +
            "        \"type\": \"keyword\",\n" +
            "        \"index\": false\n" +
            "      },\n" +
            "      \"category\": {\n" +
            "        \"type\": \"keyword\"\n" +
            "      },\n" +
            "      \"brand\": {\n" +
            "        \"type\": \"keyword\"\n" +
            "      },\n" +
            "      \"sold\": {\n" +
            "        \"type\": \"integer\"\n" +
            "      },\n" +
            "      \"commentCount\": {\n" +
            "        \"type\": \"integer\",\n" +
            "        \"index\": false\n" +
            "      },\n" +
            "      \"isAD\": {\n" +
            "        \"type\": \"boolean\"\n" +
            "      },\n" +
            "      \"updateTime\": {\n" +
            "        \"type\": \"date\"\n" +
            "      }\n" +
            "    }\n" +
            "  }\n" +
            "}";
}
相关推荐
彩色的黑'''21 分钟前
[root@localhost ~]#,Linux系统的命令提示符为啥现在变成-bash-4.2#了,哪里设置的
linux·运维·bash
树下水月26 分钟前
文件分片上传接口(Easyswoole)被nginx拦截,并返回状态码400和408的抓包排查过程
运维·nginx
南境十里·墨染春水1 小时前
linux学习进展 shell编程
linux·运维·学习
goyeer2 小时前
【ITIL4】32服务实践 - 问题管理(Problem Management)
linux·运维·服务器·企业数字化·it管理·itil·it治理
cen__y3 小时前
Linux11(网络编程)
linux·运维·服务器·c语言·网络·网络协议·tcp/ip
CableTech_SQH3 小时前
商业地产和高端酒店该怎么选综合布线解决方案?
运维·服务器·网络
xingyuzhisuan4 小时前
哪里可以一键部署Stable Diffusion XL的GPU云环境?(2026实测指南)
运维·人工智能·stable diffusion·gpu算力
Agent手记4 小时前
采购合同智能审核自动化,落地步骤与落地风险管控方案 —— 2026年企业级Agent深度实战指南
运维·人工智能·ai·自动化
Liangwei Lin4 小时前
LeetCode 22. 括号生成
linux·运维·服务器
( •̀∀•́ )9204 小时前
Linux 下部署 `social-auto-upload` 遇到的问题及完整解决方案
linux·运维·服务器