环境
ElasticSearch 6.2.2
springboot 2.1.1.RELEASE
数据准备
下载之后执行如下命令
导入成功如下图所示
项目搭建
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.hadron</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<repositories>
<repository>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
实体类
@Data
@Document(indexName = "how2java", type = "product")
public class Product {
private int id;
private String name;
private String category;
private float price;
private String place;
private String code;
}
DAO
public interface ProductDao extends ElasticsearchRepository<Product, Integer> {
public List<Product> findByName(String name);
public List<Product> findByNameAndCategory(String name, String category);
public Page<Product> findByNameAndCategory(String name, String category, Pageable pageable);
public List<Product> deleteByName(String name);
}
Controller
@RestController
public class MyController {
@Autowired
ProductDao productDao;
@RequestMapping("addProduct")
public Product addProduct(@RequestBody Product product) {
//新增单个
productDao.save(product);
System.out.println(product);
return product;
}
@RequestMapping("addProductList")
public List<Product> addProductList(@RequestBody List<Product> product) {
//批量新增
productDao.saveAll(product);
System.out.println(product);
return product;
}
@RequestMapping("/deleteByName")
public String delete(String name) {
//按name删除
productDao.deleteByName(name);
return "success";
}
@RequestMapping("/getByName")
public List<Product> getByName(String name) {
//按name查询
List<Product> list = productDao.findByName(name);
return list;
}
@RequestMapping("/getByNameAndCategory")
public List<Product> getByNameAndCategory(String name, String category) {
//按name和category查询
List<Product> list = productDao.findByNameAndCategory(name, category);
return list;
}
@RequestMapping("/get_by_page")
public List<Product> getByNameAndCategory(String name, String category, Integer start, Integer size) {
//按name和category分页查询
Pageable pageable = new PageRequest(start, size);
Page<Product> page = productDao.findByNameAndCategory(name, category, pageable);
for (Product product : page.getContent()) {
System.out.println(product);
}
return page.getContent();
}
@RequestMapping("/like_by_page")
public List<Product> likeByNameAndCategory(String name, String category, Integer start, Integer size) {
//分页模糊查询
//wildcardQuery 统配符模糊查询模糊查询 *表示任意多个字符 ?表示任意一个字符
QueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery("name", "*" + name + "*");
//queryStringQuery 默认左右模糊查询
QueryBuilder queryBuilder2 = QueryBuilders.queryStringQuery(category).field("category");
//should 类似于or
QueryBuilder queryBuilder3 = QueryBuilders.boolQuery().should(queryBuilder1).should(queryBuilder2);
//must 必须符合的条件 mustNot 必须不符合的条件
// QueryBuilder queryBuilder3 = QueryBuilders.boolQuery().must(queryBuilder1).must(queryBuilder2);
Pageable pageable = new PageRequest(start, size);
Page<Product> page = productDao.search(queryBuilder3, pageable);
return page.getContent();
}
}
测试
模糊查询
批量插入
按name查询