You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Spring Boot 3连接AWS OpenSearch的指导文档?

Spring Boot 3 集成 AWS OpenSearch 实操指引

1. 依赖配置

AWS OpenSearch兼容Elasticsearch API,因此可以直接使用Spring Data Elasticsearch进行集成。以下是适配Spring Boot 3的依赖配置:

Maven(pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>opensearch</artifactId>
    <version>2.20.0</version>
</dependency>
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>auth</artifactId>
    <version>2.20.0</version>
</dependency>

Gradle(build.gradle)

implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'software.amazon.awssdk:opensearch:2.20.0'
implementation 'software.amazon.awssdk:auth:2.20.0'

2. 连接配置

在application.yml或application.properties中配置OpenSearch端点、AWS区域及认证信息:

spring:
  elasticsearch:
    uris: "https://your-opensearch-endpoint.us-east-1.es.amazonaws.com"
    ssl:
      verification-mode: none # 测试环境可关闭,生产建议开启证书验证

aws:
  region: us-east-1

认证说明:

  • 如果部署在AWS EC2/ECS/EKS上,可直接使用IAM角色认证,无需配置access key(SDK会自动获取实例角色凭证)。
  • 本地测试可通过环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY注入IAM用户凭证。

3. 自定义客户端Bean

创建配置类,生成带有AWS签名支持的OpenSearch客户端:

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.opensearch.OpenSearchClient;

@Configuration
public class OpenSearchConfig {

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

    @Value("${aws.region}")
    private String awsRegion;

    // AWS原生OpenSearch客户端(用于管理集群等操作)
    @Bean
    public OpenSearchClient awsOpenSearchClient() {
        return OpenSearchClient.builder()
                .credentialsProvider(DefaultCredentialsProvider.create())
                .region(Region.of(awsRegion))
                .build();
    }

    // Spring Data Elasticsearch兼容客户端(用于数据CRUD)
    @Bean
    public ElasticsearchClient elasticsearchClient() {
        RestClient restClient = RestClient.builder(HttpHost.create(opensearchEndpoint)).build();
        RestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        return new ElasticsearchClient(transport);
    }
}

4. 实体类与Repository

实体类定义

用@Document注解指定索引名称,字段用@Field定义类型:

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Document(indexName = "products")
public class Product {
    @Id
    private String id;

    @Field(type = FieldType.Text)
    private String name;

    @Field(type = FieldType.Double)
    private Double price;

    // getter、setter、构造方法省略
}

Repository接口

继承ElasticsearchRepository实现基础CRUD,也可自定义查询方法:

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.util.List;

public interface ProductRepository extends ElasticsearchRepository<Product, String> {
    // 根据名称模糊查询
    List<Product> findByNameContaining(String keyword);
}

5. 业务层调用示例

在Service中注入Repository或客户端进行数据操作:

import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class ProductService {
    private final ProductRepository productRepository;

    public ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    public Product saveProduct(Product product) {
        return productRepository.save(product);
    }

    public List<Product> searchProducts(String keyword) {
        return productRepository.findByNameContaining(keyword);
    }
}

关键注意事项

  • IAM权限:确保操作OpenSearch的IAM实体(用户/角色)拥有es:ESHttpPut、es:ESHttpGet等必要权限,可通过AmazonOpenSearchServiceFullAccess策略快速配置(生产建议细粒度授权)。
  • 版本兼容:Spring Boot 3对应Spring Data Elasticsearch 5.x,需匹配AWS OpenSearch版本(OpenSearch 3.x对应Elasticsearch 8.x,2.x对应Elasticsearch 7.x)。
  • VPC访问:若OpenSearch部署在VPC内,Spring Boot应用需部署在同一VPC,或配置VPC端点、NAT网关实现访问。

内容的提问来源于stack exchange,提问作者Chris Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:08:29