Spring Boot 2.5集成Elasticsearch实践指南

环境准备

  • JDK 1.8或更高版本
  • Spring Boot 2.5.x
  • Elasticsearch 7.x(建议7.9+)
  • Maven/Gradle构建工具

添加依赖 Maven配置需包含以下核心依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.9.3</version>
</dependency>

配置连接参数 application.yml配置示例:

spring:
  elasticsearch:
    rest:
      uris: http://localhost:9200
      username: elastic
      password: yourpassword
      connection-timeout: 5s
      read-timeout: 30s

实体类映射 使用@Document注解定义索引映射:

@Document(indexName = "products")
public class Product {
    @Id
    private String id;
    @Field(type = FieldType.Text)
    private String name;
    @Field(type = FieldType.Double)
    private Double price;
    // getters/setters
}

Repository接口 继承ElasticsearchRepository:

public interface ProductRepository extends ElasticsearchRepository<Product, String> {
    List<Product> findByName(String name);
    Page<Product> findByPriceBetween(Double price1, Double price2, Pageable pageable);
}

自定义查询实现 通过RestHighLevelClient实现复杂查询:

@Autowired
private RestHighLevelClient client;

public List<Product> searchByCustomQuery(String keyword) {
    SearchRequest searchRequest = new SearchRequest("products");
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    sourceBuilder.query(QueryBuilders.multiMatchQuery(keyword, "name", "description"));
    searchRequest.source(sourceBuilder);
    
    SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
    // 处理返回结果
}

性能优化建议

  • 启用连接池:配置spring.elasticsearch.rest.max-conn-total
  • 使用批量操作:BulkProcessor处理批量索引
  • 合理设置分片数:根据数据量设置index.number_of_shards
  • 启用慢查询日志:通过index.search.slowlog.threshold.query.warn配置

常见问题解决

  • 版本兼容性问题:确保Spring Data Elasticsearch版本与ES服务端匹配
  • 字段类型冲突:通过@Field显式指定字段类型
  • 连接超时:调整connection-timeout和read-timeout参数
  • 认证失败:检查用户名密码和xpack.security.enabled配置

测试验证 编写测试用例验证功能:

@SpringBootTest
class ProductSearchTest {
    @Autowired
    private ProductRepository repository;

    @Test
    void testBasicCRUD() {
        Product product = new Product();
        product.setName("Test Product");
        product.setPrice(99.99);
        
        Product saved = repository.save(product);
        assertNotNull(saved.getId());
        
        Optional<Product> found = repository.findById(saved.getId());
        assertTrue(found.isPresent());
    }
}

生产环境建议

  • 使用HTTPS协议保障通信安全
  • 配置集群节点而非单节点连接
  • 实现健康检查机制监控ES状态
  • 考虑使用Alias管理索引生命周期
  • 定期备份索引快照
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐