SpringBoot整合(ES)ElasticSearch7.8实践

 更新时间:2025年07月16日 14:29:33   作者:wangshili程序员  
本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插入数据等核心步骤,结合官方文档指引及Lombok简化实体类配置,提供完整实践方案

SpringBoot整合ElasticSearch7.8

所有的教程都参考于官方文档,这里给大家说明文档位置,搜索elasticsearch官网的Docs界面,找到ElasticSearch Client这个选项,图中也有位置,根据图中的位置找就行了。

前提是要安装好ES,挺简单的,这里就不说了。

添加依赖

根据官方文档导入对应架包

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.8.1</version>
</dependency>

初始化

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));
//使用完后关闭资源
client.close();

所有的方法都在RestHighLevelClient类中了,直接去使用即可

创建SpringBoot项目

SpringBoot中已经有了starter,直接选择NoSQL里面导入启动依赖就可以了

创建配置类

@Configuration
public class ElasticConfig {

    @Bean
    public RestHighLevelClient getRestHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                //如果是集群再配置多个
                RestClient.builder(new HttpHost("127.0.0.1",9200,"http"))
        );

        return client;
    }
}

测试案例

创建索引

查看官方手册

可以看到很多的API,我们试试索引API,点击Index APIs

第一个是创建索引的简单方式,创建完成后还要发送指令过去,发送方式拉到最下就可以看到一个同步和异步的发送,我们使用同步就行了。

我们直接在test目录测试下

@SpringBootTest
class ElasticsearchDemoApplicationTests {

    @Test
    void contextLoads() {
    }

    @Qualifier("getRestHighLevelClient")
    @Autowired
    private RestHighLevelClient client;

    /**
     * 创建索引
     */
    @Test
    public void test1(){
        //注意索引名要小写
        CreateIndexRequest request = new CreateIndexRequest("springboot_es_test1");
        try {
            CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

如果执行不报错,那就可以打开可视化工具查看或者kibana去查看索引创建情况

获取索引

我们也可以直接通过java代码获取索引去检测,这个代码也是可以从官方获取的

 /**
     * 获取索引
     */
    @Test
    public void test2(){
        GetIndexRequest request = new GetIndexRequest("springboot_es_test1");
        try {
            boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
            System.out.println(exists);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

创建索引并加入对象的属性和值

1、查看官方案例

2、创建实体类

这里使用的lombok,不会使用的小伙伴手动添加get/set全参构造和无参构造方法

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String username;
    private Integer age;
}

3、测试方法

 /**
     * 测试对象的操作
     */
    @Test
    public void test3(){
        //创建对象
        User user = new User("测试", 13);

        IndexRequest request = new IndexRequest("posts");
        request.id("1");
        //对象转为json
        request.source(JSON.toJSON(user), XContentType.JSON);

        try {
            //发送
            IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
            //获取索引内容看看
            GetRequest getRequest = new GetRequest("posts","1");
            GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
            System.out.println(getResponse);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

批量插入数据

真实的项目一般都是大批量的插入数据,比如从数据库中、消息队列或者缓存中获取数据插入等等,ES也提供了批量插入的方法,BulkRequest类。

    /**
     * 设置批量插入
     */
    @Test
    public void test4(){
        //创建批量请求
        BulkRequest bulkRequest = new BulkRequest();
        //超时时间
        bulkRequest.timeout("10s");
        //模拟数据
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("张1",1));
        users.add(new User("张2",2));
        users.add(new User("张3",3));
        users.add(new User("张4",4));
        int i=0 ;
        //批量插入
        for(User user:users){
            bulkRequest.add(
                    new IndexRequest("test2")
                            .id(""+i++)
                            .source(JSON.toJSONString(user), XContentType.JSON)
            );
        }
        try {
            //发送请求
            BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
            //获取是否失败标志
            System.out.println(bulk.hasFailures());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mybatis-plus分页如何接收前端参数limit和page

    mybatis-plus分页如何接收前端参数limit和page

    这篇文章主要介绍了mybatis-plus分页如何接收前端参数limit和page,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • json转换成java对象示例

    json转换成java对象示例

    这篇文章主要介绍了json转换成java对象示例,需要的朋友可以参考下
    2014-04-04
  • Spring Retry优雅地实现方法重试机制

    Spring Retry优雅地实现方法重试机制

    Spring Retry 是 Spring 提供的一个模块,它可以帮助我们以声明式的方式为方法添加重试功能,从而提升系统的健壮性和可用性,下面我们就来看看如何使用Spring Retry实现方法重试机制吧
    2025-06-06
  • Java中List遍历删除元素remove()的方法

    Java中List遍历删除元素remove()的方法

    这篇文章主要介绍了Java中List遍历删除元素remove()的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java集合之LinkedList源码解析

    Java集合之LinkedList源码解析

    这篇文章主要介绍了Java集合之LinkedList源码解析,LinkedList和ArrayList数据结构是完全不一样的,ArrayList 底层是数组的结构,而 LinkedList 的底层则是链表的结构, 它可以进行高效的插入和移除的操作,它基于的是一个双向链表的结构,需要的朋友可以参考下
    2023-12-12
  • Spring Boot多个定时任务阻塞问题的解决方法

    Spring Boot多个定时任务阻塞问题的解决方法

    在日常的项目开发中,往往会涉及到一些需要做到定时执行的代码,下面这篇文章主要给大家介绍了关于Spring Boot多个定时任务阻塞问题的解决方法,需要的朋友可以参考下
    2022-01-01
  • List对象去重和按照某个字段排序的实现方法

    List对象去重和按照某个字段排序的实现方法

    下面小编就为大家带来一篇List对象去重和按照某个字段排序的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Java调用Python脚本传递数据并返回计算结果

    Java调用Python脚本传递数据并返回计算结果

    实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,Java如何调用Python脚本,感兴趣的可以了解一下
    2021-05-05
  • Java截取字符串的方法

    Java截取字符串的方法

    这篇文章主要介绍了Java截取字符串的方法,实例分析了java中substring方法的使用技巧,需要的朋友可以参考下
    2015-05-05
  • Java字符串写入文件三种方式的实现

    Java字符串写入文件三种方式的实现

    这篇文章主要介绍了 Java字符串写入文件三种方式的实现的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论