2022-03-17:
start
es的搭建请参考:es学习之elasticsearch在centos7上的搭建
end
0、查看es相关文档:Elasticsearch中文文档
1、创建项目,如图:
2、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>xyz.haijin</groupId>
<artifactId>springdata-elasticsearch</artifactId>
<version>1.0-SNAPSHOT</version>
<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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3、项目截图:
4、创建实体类:
package xyz.haijin.bean;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
/**
* @Author liuhaijin
* @Date 2022/3/15
*/
@Document(indexName = "book", type = "_doc")
public class BookBean {
@Id
private String id;
private String title;
private String author;
private String postDate;
public BookBean(){}
public BookBean(String id, String title, String author, String postDate){
this.id=id;
this.title=title;
this.author=author;
this.postDate=postDate;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPostDate() {
return postDate;
}
public void setPostDate(String postDate) {
this.postDate = postDate;
}
@Override
public String toString() {
return "BookBean{" +
"id='" + id + '\'' +
", title='" + title + '\'' +
", author='" + author + '\'' +
", postDate='" + postDate + '\'' +
'}';
}
5、创建dao层:
package xyz.haijin.dao;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import xyz.haijin.bean.BookBean;
/**
* 接口关系
* ElasticsearchRepository --> ElasticsearchCrudRepository --> PagingAndSortingRepository --> CrudRepository
*
* @Author liuhaijin
* @Date 2022/3/15
*/
public interface BookRepository extends ElasticsearchRepository<BookBean, String> {
//Optional<BookBean> findById(String id);
Page<BookBean> findByAuthor(String author, Pageable pageable);
Page<BookBean> findByTitle(String title, Pageable pageable);
}
6、创建service层:
package xyz.haijin.xyz.haijin.service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import xyz.haijin.bean.BookBean;
import java.util.List;
import java.util.Optional;
/**
* @Author liuhaijin
* @Date 2022/3/15
*/
public interface BookService {
Optional<BookBean> findById(String id);
BookBean save(BookBean blog);
void delete(BookBean blog);
Optional<BookBean> findOne(String id);
List<BookBean> findAll();
Page<BookBean> findByAuthor(String author, PageRequest pageRequest);
Page<BookBean> findByTitle(String title, PageRequest pageRequest);
}
package xyz.haijin.xyz.haijin.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import xyz.haijin.bean.BookBean;
import xyz.haijin.dao.BookRepository;
import xyz.haijin.xyz.haijin.service.BookService;
import java.util.List;
import java.util.Optional;
/**
* @Author liuhaijin
* @Date 2022/3/15
*/
@Service("blogService")
public class BookServiceImpl implements BookService {
@Autowired
@Qualifier("bookRepository")
private BookRepository bookRepository;
@Override
public Optional<BookBean> findById(String id) {
//CrudRepository中的方法
return bookRepository.findById(id);
}
@Override
public BookBean save(BookBean blog) {
return bookRepository.save(blog);
}
@Override
public void delete(BookBean blog) {
bookRepository.delete(blog);
}
@Override
public Optional<BookBean> findOne(String id) {
return bookRepository.findById(id);
}
@Override
public List<BookBean> findAll() {
return (List<BookBean>) bookRepository.findAll();
}
@Override
public Page<BookBean> findByAuthor(String author, PageRequest pageRequest) {
return bookRepository.findByAuthor(author,pageRequest);
}
@Override
public Page<BookBean> findByTitle(String title, PageRequest pageRequest) {
return bookRepository.findByTitle(title,pageRequest);
}
}
7、创建controller层:
package xyz.haijin.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;
import xyz.haijin.bean.BookBean;
import xyz.haijin.xyz.haijin.service.BookService;
import java.util.Optional;
/**
* @Author liuhaijin
* @Date 2022/3/15
*/
@RestController
public class ElasticController {
@Autowired
private BookService bookService;
@RequestMapping("/book/{id}")
@ResponseBody
public BookBean getBookById(@PathVariable String id){
Optional<BookBean> opt =bookService.findById(id);
BookBean book=opt.get();
System.out.println(book);
return book;
}
@RequestMapping("/save")
@ResponseBody
public void Save(){
BookBean book=new BookBean("1","ES入门教程","haijin","2022-03-15");
System.out.println(book);
bookService.save(book);
}
@GetMapping("/page")
@ResponseBody
public Page<BookBean> page(@RequestParam String author){
PageRequest pageRequest = PageRequest.of(0,10, Sort.unsorted());
Page<BookBean> bookBeanPage = bookService.findByAuthor(author, pageRequest);
System.out.println(bookBeanPage);
return bookBeanPage;
}
@GetMapping("/delete")
@ResponseBody
public void delete(@RequestParam String id){
BookBean book=new BookBean(id,"","","");
bookService.delete(book);
}
}
8、application.properties配置文件:
spring.data.elasticsearch.cluster-name=test
spring.data.elasticsearch.cluster-nodes=192.168.19.131:9300
spring.data.elasticsearch.repositories.enabled=true
9、创建启动类:
package xyz.haijin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author liuhaijin
* @Date 2022/3/15
*/
@SpringBootApplication
public class EsApplation {
public static void main(String[] args) {
SpringApplication.run(EsApplation.class, args);
}
}
10、请求:
http://localhost:8080/book/1 查询
http://localhost:8080/delete?id=1 删除
c