暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Spring Boot 集成 Elasticsearch【入门篇】

源话编程 2024-07-23
74

👋 热爱编程的小伙伴们,欢迎来到我的编程技术分享公众号!在这里,我会分享编程技巧、实战经验、技术干货,还有各种有趣的编程话题!

Elasticsearch 是一个分布式搜索和分析引擎,广泛应用于全文搜索、日志分析和实时数据处理等场景。Spring Boot 提供了与 Elasticsearch 的无缝集成,使得开发人员能够更方便地构建基于 Elasticsearch 的应用程序。本教程将详细介绍如何在 Spring Boot 项目中集成 Elasticsearch,并提供完整的示例代码。

前置条件

在开始之前,请确保你已经安装和配置了以下环境:

  • JDK 8 或以上版本
  • Maven 3.6.0 或以上版本
  • Elasticsearch 7.x 版本

1. 创建 Spring Boot 项目

首先,通过 Spring Initializr 创建一个新的 Spring Boot 项目,添加以下依赖:

  • Spring Web
  • Spring Data Elasticsearch
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2. 配置 Elasticsearch

application.yml
文件中添加 Elasticsearch 的配置:

spring:
  elasticsearch:
    uris: http://localhost:9200
    username: elastic
    password: elastic

3. 创建实体类

定义一个与 Elasticsearch 索引对应的实体类,并使用注解进行配置:

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Data
@Document(indexName = "product")
public class Product {

    @Id
    private String id;
    private String name;
    private Double price;
}

4. 创建 Repository 接口

创建一个继承 ElasticsearchRepository
的接口,用于与 Elasticsearch 进行交互:

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends ElasticsearchRepository<ProductString{
}

5. 编写服务层

在服务层中编写业务逻辑,使用 ProductRepository
完成对 Elasticsearch 的操作:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
public class ProductService {
    
    @Autowired
    private ProductRepository productRepository;

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

    public Optional<Product> findProductById(String id) {
        return productRepository.findById(id);
    }

    public Iterable<Product> findAllProducts() {
        return productRepository.findAll();
    }

    public void deleteProductById(String id) {
        productRepository.deleteById(id);
    }
}

6. 创建控制器

在控制器中编写 API 接口,调用服务层的方法:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;

@RestController
@RequestMapping("/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    @PostMapping
    public ResponseEntity<Product> createProduct(@RequestBody Product product) {
        Product savedProduct = productService.saveProduct(product);
        return ResponseEntity.ok(savedProduct);
    }

    @GetMapping("/{id}")
    public ResponseEntity<Product> getProductById(@PathVariable String id) {
        Optional<Product> product = productService.findProductById(id);
        return product.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
    }

    @GetMapping
    public ResponseEntity<Iterable<Product>> getAllProducts() {
        Iterable<Product> products = productService.findAllProducts();
        return ResponseEntity.ok(products);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteProductById(@PathVariable String id) {
        productService.deleteProductById(id);
        return ResponseEntity.noContent().build();
    }
}

7. 测试

启动 Spring Boot 应用程序,并使用 Postman 或其他工具测试 API 接口:

  • 创建产品:POST http://localhost:8080/products
  • 获取所有产品:GET http://localhost:8080/products
  • 根据 ID 获取产品:GET http://localhost:8080/products/{id}
  • 删除产品:DELETE http://localhost:8080/products/{id}

本文示例项目地址:https://gitee.com/zhyuu/study/tree/master/Springboot-Elasticsearch

结语

通过本文的教程,我们详细介绍了如何在 Spring Boot 项目中集成 Elasticsearch,并提供了完整的代码示例。这只是一个简单的入门示例,后续将会针对 Elasticsearch 做一些更深入的研究。希望这篇文章能够帮助你更好地理解和使用 Elasticsearch。


个人观点,仅供参考,非常感谢各位朋友们的支持与关注

如果你觉得这个作品对你有帮助,请不吝点赞在看,分享给身边更多的朋友。如果你有任何疑问或建议,欢迎在评论区留言交流。


文章转载自源话编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论