springboot整合elasticsearch8

本文介绍如何在Java项目中集成Elasticsearch,包括Maven依赖配置、Spring Boot项目的配置类编写及简单测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.引入maven依赖
 		<dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>jakarta.json</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>8.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>8.4.1</version>
        </dependency>
2.application.yml添加配置
spring:
  elasticsearch:
    rest:
      uris: 127.0.0.1:9200 #es
      username: elastic
      password: ******
3.编写config文件
package com.example.demo.config;

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.impl.nio.reactor.IOReactorConfig;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

@Configuration
public class ElasticSearchConfig {

    @Value("${spring.elasticsearch.rest.uris}")
    private String hosts;

    @Value("${spring.elasticsearch.rest.username}")
    private String userName;

    @Value("${spring.elasticsearch.rest.password}")
    private String passWord;


    @Bean
    public ElasticsearchClient elasticsearchClient(){
        HttpHost[] httpHosts = toHttpHost();
        // 无验证信息
        //RestClient restClient = RestClient.builder(httpHosts).build();

        // 有验证信息
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(
                AuthScope.ANY, new UsernamePasswordCredentials(userName, passWord));

        RestClientBuilder builder = RestClient.builder(httpHosts);
        builder.setRequestConfigCallback(
                new RestClientBuilder.RequestConfigCallback() {
                    @Override
                    public RequestConfig.Builder customizeRequestConfig(
                            RequestConfig.Builder requestConfigBuilder) {
                        return requestConfigBuilder.setSocketTimeout(60000).setConnectTimeout(5000);
                    }
                });
        builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {

                        return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });
        RestClient restClient = builder.build();
        // Create the transport with a Jackson mapper
        ElasticsearchTransport transport = new RestClientTransport(restClient,new JacksonJsonpMapper());
        // And create the API client
        return new ElasticsearchClient(transport);
    }

    private HttpHost[] toHttpHost() {
        if (!StringUtils.hasLength(hosts)) {
            throw new RuntimeException("invalid elasticsearch configuration. elasticsearch.hosts不能为空!");
        }

        // 多个IP逗号隔开
        String[] hostArray = hosts.split(",");
        HttpHost[] httpHosts = new HttpHost[hostArray.length];
        HttpHost httpHost;
        for (int i = 0; i < hostArray.length; i++) {
            String[] strings = hostArray[i].split(":");
            httpHost = new HttpHost(strings[0], Integer.parseInt(strings[1]), "http");
            httpHosts[i] = httpHost;
        }

        return httpHosts;
    }

}

启动demo项目,通过控制台日志查看是否能够正常连接es。

4.在DemoApplicationTests编写简单测试操作es。
@SpringBootTest
@Slf4j
class DemoApplicationTests {

    @Autowired
    private ElasticsearchClient client;

    @Test
    public void createTest() throws IOException {
        log.info("创建索引");
        //写法比RestHighLevelClient更加简洁
        CreateIndexResponse indexResponse = client.indices().create(c -> c.index("user"));
        log.info(String.valueOf(indexResponse));
    }

    @Test
    public void getCompanyList() throws IOException {
 		log.info("查询索引");	
        GetIndexResponse getIndexResponse = client.indices().get(i -> i.index("user"));
        log.info(String.valueOf(getIndexResponse));
    }

    @Test
    public void existsTest() throws IOException {
        log.info("测试index是否存在");
        BooleanResponse booleanResponse = client.indices().exists(e -> e.index("user"));
        log.info(String.valueOf(booleanResponse.value()));
    }

    @Test
    public void userInsert() throws IOException {
        log.info("user信息插入");
        //创建user列表
        List<User> users = new ArrayList<>();
        User user = new User();
        user.setId("18");
        user.setName("李三");
        user.setAge(13);
        user.setSex("男");
        users.add(user);
        
        List<BulkOperation> bulkOperations = new ArrayList<>();
        //将user中id作为es id,也可不指定id es会自动生成id
        users.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.index(c -> c.id(a.getId()).document(a)))));
        client.bulk(x ->x.index("user").operations(bulkOperations));

    }

}
### Spring Boot 整合 Elasticsearch 8 配置教程 #### 1. 添加依赖项 为了使 Spring Boot 能够与 Elasticsearch 进行交互,需在项目的 `pom.xml` 文件中加入相应的 Maven 依赖。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>3.0.0</version> <!-- 版本号应匹配使用的Spring Boot版本 --> </dependency> <!-- 如果使用的是RestHighLevelClient,则还需要添加如下依赖 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>8.x.x</version> <!-- 使用Elasticsearch 8对应的客户端库 --> </dependency> ``` #### 2. 修改配置文件 编辑 `application.properties` 或者 `application.yml` 来指定连接到 Elasticsearch 实例所需的参数: 对于 `.properties` 文件: ```properties spring.elasticsearch.uris=http://localhost:9200 spring.data.elasticsearch.repositories.enabled=true ``` 对于 `.yml` 文件: ```yaml spring: elasticsearch: uris: http://localhost:9200 data: elasticsearch: repositories: enabled: true ``` 以上设置指定了目标 Elasticsearch 的地址,并启用了基于仓库模式的数据访问支持[^2]。 #### 3. 创建实体类和 Repository 接口 定义一个 Java 类来表示要存储于索引中的文档结构;接着创建继承自 `ElasticsearchRepository<T, ID>` 的接口用于执行 CRUD 操作。 ```java import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; @Document(indexName = "users") // 定义该对象映射至哪个索引下 public class User { @Id private String id; private String name; private int age; // Getters and Setters... } ``` ```java import org.springframework.stereotype.Repository; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; @Repository public interface UserRepository extends ElasticsearchRepository<User, String> {} ``` 通过这种方式可以像操作关系型数据库那样便捷地管理 Elasticsearch 中的数据记录[^3]。 #### 4. 编写服务层逻辑和服务测试案例 编写业务逻辑处理程序调用上述 repository 方法完成增删改查功能。同时建议开发单元测试验证各项功能是否正常工作。 ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> findAllUsers() { return (List<User>)userRepository.findAll(); } // Other business methods... } // 测试案例省略... ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值