1)打开Elasticsearch、Elasticsearch-head、kibana服务,要确保服务开启,否则spingboot项目启动会报错。
2)创建SpringBoot项目
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
application.yml
server:
port: 8099
spring:
elasticsearch:
uris: http://localhost:9200
# username: elastic # 如果你配置了用户名和密码
# password: password
实体entity层
package com.example.elasticsearchtest.entity;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
/**
* @Author lxw
* @ClassName Product
* @Date 2024/9/21 9:05
*/
@Document(indexName="product")
@Data
public class Product {
@Id
private String id;
private String name;
private String description;
private double price;
private String category;
}
Repository层
package com.example.elasticsearchtest.repository;
import com.example.elasticsearchtest.entity.Product;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author lxw
* @ClassName ProductRepository
* @Date 2024/9/21 9:07
*/
@Repository
public interface ProductRepository extends ElasticsearchRepository<Product,String> {
List<Product> findAll();
List<Product> findByCategory(String category);
}
Service和Impl层
package com.example.elasticsearchtest.service;
import com.example.elasticsearchtest.entity.Product;
import java.util.List;
/**
* @Author lxw
* @ClassName ProductService
* @Date 2024/9/21 9:09
*/
public interface ProductService {
Product saveProduct(Product product);
List<Product> getAllProducts();
Product updateProduct(Product product);
void deleteProductById(String id);
List<Product> getProductByCategory(String category);
}
package com.example.elasticsearchtest.service.impl;
import com.example.elasticsearchtest.entity.Product;
import com.example.elasticsearchtest.repository.ProductRepository;
import com.example.elasticsearchtest.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author lxw
* @ClassName ProductServiceImpl
* @Date 2024/9/21 9:09
*/
@Service
public class ProductServiceImpl implements ProductService {
@Autowired
private ProductRepository productRepository;
@Override
public Product saveProduct(Product product) {
return productRepository.save(product);
}
@Override
public List<Product> getAllProducts() {
return productRepository.findAll();
}
@Override
public Product updateProduct(Product product) {
// 如果id存在,则会更新
return productRepository.save(product);
}
@Override
public void deleteProductById(String id) {
productRepository.deleteById(id);
}
@Override
public List<Product> getProductByCategory(String category) { // 查询所有包含关键词的文档
return productRepository.findByCategory(category);
}
}
Controller层
package com.example.elasticsearchtest.controller;
import com.example.elasticsearchtest.entity.Product;
import com.example.elasticsearchtest.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @Author lxw
* @ClassName ProductController
* @Date 2024/9/21 9:19
*/
@RestController
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@PostMapping("/addProduct")
public Product addProduct(@RequestBody Product product){
return productService.saveProduct(product);
}
@PostMapping("/getAllProducts")
public List<Product> getAllProducts() {
return productService.getAllProducts();
}
@PostMapping("/updateProduct")
public Product updateProduct(@RequestBody Product product) {
return productService.updateProduct(product);
}
@PostMapping("/deleteProduct")
public void deleteProduct(@RequestParam(value = "id") String id) {
productService.deleteProductById(id);
}
@PostMapping("/getProductbycategory")
public List<Product> getProductByCategory(@RequestParam(value = "category") String category) {
return productService.getProductByCategory(category);
}
}
启动项
package com.example.elasticsearchtest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
/**
* @author Administrator
*/
@SpringBootApplication
@EnableElasticsearchRepositories("com.example.elasticsearchtest.repository")
public class ElasticSearchTestApplication {
public static void main(String[] args) {
SpringApplication.run(ElasticSearchTestApplication.class, args);
}
}
3)启动项目,进行测试
添加测试
打开elasticsearch-head查看添加的数据
多添加几条数据
遍历查询
根据信息查询
更新信息
刷新后:
删除测试
刷新后