Spring Boot整合ElasticSearch實現增刪改查基本示例
ElasticSearch被命名為大資料搜尋引擎,在檔案檢索、資料儲存方面具有天然的優勢。而SpringBoot作為服務整合中介軟體,在服務組裝方面是一款萬能粘合器,本文主要提供Spring Boot整合ElasticSearch基本增刪改示例。
一、ElasticSearch安裝
ElasticSearch安裝過程可參考博主之前筆文:
https://www。toutiao。com/i6827758978567504392/
二、ElasticSearch基本介紹
ElasticSearch基本介紹可參考博主之前筆文:
https://www。toutiao。com/i6884427730096488971/
三、Spring Boot專案引入ElasticSearch座標
Maven工程引入:
注意:ElasticSearch版本號與Spring Boot版本號是有關聯的,本文筆者Spring Boot版本號是2。1。6,因此安裝的ElasticSearch版本號是7。7。0。
四、宣告ElasticSearch Model層工具
package com。opendi。generator。elasticsearch。model;
import lombok。Data;
import org。springframework。data。annotation。Id;
import org。springframework。data。elasticsearch。annotations。Document;
import org。springframework。data。elasticsearch。annotations。Field;
import org。springframework。data。elasticsearch。annotations。FieldType;
import java。util。List;
@Data
@Document(indexName=“post”, type=“post”,shards=1,replicas = 0)
public class Post {
@Id
private String id;
private String title;
@Field(type=FieldType。Nested)
private List
}
package com。opendi。generator。model;
import lombok。Data;
import org。springframework。data。annotation。Id;
import org。springframework。data。elasticsearch。annotations。Document;
import org。springframework。data。elasticsearch。annotations。Field;
import org。springframework。data。elasticsearch。annotations。FieldType;
@Data
@Document(indexName = “book”, type = “_doc”, shards = 1, replicas = 0)
public class BookBean {
@Id
private String id;
@Field(type = FieldType。Keyword)
private String title;
@Field(type = FieldType。Keyword)
private String author;
@Field(type = FieldType。Keyword)
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 + ’\‘’ +
‘}’;
}
}
宣告文件類為ElasticSearch型別的Document文件,欄位Field型別也為ES裡面的Field型別。
五、宣告ElasticSearch處理的DAO層工具
package com。opendi。generator。elasticsearch。mapper;
import com。opendi。generator。elasticsearch。model。Post;
import org。springframework。data。domain。Page;
import org。springframework。data。domain。Pageable;
import org。springframework。data。elasticsearch。repository。ElasticsearchRepository;
public interface PostRepository extends ElasticsearchRepository
Page
}
package com。opendi。generator。dao;
import com。opendi。generator。model。BookBean;
import org。springframework。data。domain。Page;
import org。springframework。data。domain。Pageable;
import org。springframework。data。elasticsearch。repository。ElasticsearchRepository;
/**
* 介面關係:
* ElasticsearchRepository ——> ElasticsearchCrudRepository ——> PagingAndSortingRepository ——> CrudRepository
*/
public interface BookRepository extends ElasticsearchRepository
//Optional
Page
Page
}
使用了ElasticSearch裡面的操作工具對資料進行操作。
六、宣告ElasticSearch裡面的Service層
宣告Service層操作工具,來源於ElasticSearch工具類,自動進行增刪改操作:
package com。opendi。generator。elasticsearch。service;
import com。opendi。generator。elasticsearch。model。Post;
import org。springframework。data。domain。Page;
import org。springframework。data。domain。PageRequest;
import java。util。Optional;
public interface PostService {
Post save(Post post);
Optional
Iterable
Page
}
指定操作物件:
package com。opendi。generator。elasticsearch。service。impl;
import com。opendi。generator。elasticsearch。mapper。PostRepository;
import com。opendi。generator。elasticsearch。model。Post;
import com。opendi。generator。elasticsearch。service。PostService;
import org。springframework。beans。factory。annotation。Autowired;
import org。springframework。data。domain。Page;
import org。springframework。data。domain。PageRequest;
import org。springframework。stereotype。Service;
import java。util。Optional;
@Service
public class PostServiceImpl implements PostService {
@Autowired
private PostRepository postRepository;
@Override
public Post save(Post post) {
postRepository。save(post);
return post;
}
@Override
public Optional
return postRepository。findById(id);
}
@Override
public Iterable
return postRepository。findAll();
}
@Override
public Page
return postRepository。findByTitle(title, pageRequest);
}
}
package com。opendi。generator。service;
import com。opendi。generator。model。BookBean;
import org。springframework。data。domain。Page;
import org。springframework。data。domain。PageRequest;
import java。util。List;
import java。util。Optional;
public interface BookService {
Optional
BookBean save(BookBean blog);
void delete(BookBean blog);
Optional
List
Page
Page
}
package com。opendi。generator。service。impl;
import com。opendi。generator。dao。BookRepository;
import com。opendi。generator。model。BookBean;
import com。opendi。generator。service。BookService;
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 java。util。List;
import java。util。Optional;
@Service(“blogService”)
public class BookServiceImpl implements BookService {
@Autowired
@Qualifier(“bookRepository”)
private BookRepository bookRepository;
@Override
public Optional
//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
return bookRepository。findById(id);
}
@Override
public List
return (List
}
@Override
public Page
return bookRepository。findByAuthor(author,pageRequest);
}
@Override
public Page
return bookRepository。findByTitle(title,pageRequest);
}
}
會呼叫ElasticSearch底層功能進行操作,能夠實現ElasticSearch增刪改操作。
七、增加伺服器配置
連線伺服器ElasticSearch連線配置:
spring:
data:
elasticsearch:
cluster-name: es2018
cluster-nodes: 10。172。8。154:9300
repositories:
enabled: true
elasticsearch:
jest:
uris: http:// 10。172。8。154:9200
增加連線配置,這樣就能連線ElasticSearch客戶端了。
八、ElasticSearch Controller層操作
ElasticSearch在Controller操作:
package com。opendi。generator。controller;
import com。opendi。generator。model。BookBean;
import com。opendi。generator。service。BookService;
import org。springframework。beans。factory。annotation。Autowired;
import org。springframework。web。bind。annotation。PathVariable;
import org。springframework。web。bind。annotation。RequestMapping;
import org。springframework。web。bind。annotation。ResponseBody;
import org。springframework。web。bind。annotation。RestController;
import java。util。Optional;
@RestController
public class ElasticController {
@Autowired
private BookService bookService;
@RequestMapping(“/book/{id}”)
@ResponseBody
public BookBean getBookById(@PathVariable String id){
Optional
BookBean book=opt。get();
System。out。println(book);
return book;
}
@RequestMapping(“/save”)
@ResponseBody
public void Save(){
System。setProperty(“es。set。netty。runtime。available。processors”, “false”);
BookBean book=new BookBean(“1”,“ES入門教程”,“程裕強”,“2018-10-01”);
System。out。println(book);
bookService。save(book);
}
}
package com。opendi。generator。elasticsearch。controller;
import com。opendi。generator。elasticsearch。model。Post;
import com。opendi。generator。elasticsearch。model。Tag;
import com。opendi。generator。elasticsearch。service。PostService;
import io。swagger。annotations。Api;
import io。swagger。annotations。ApiOperation;
import org。springframework。beans。factory。annotation。Autowired;
import org。springframework。data。domain。Page;
import org。springframework。data。domain。PageRequest;
import org。springframework。web。bind。annotation。GetMapping;
import org。springframework。web。bind。annotation。RestController;
import java。util。ArrayList;
import java。util。Arrays;
import java。util。List;
@Api(tags=“ElasticSearch示例”)
@RestController
public class PostController {
@Autowired
private PostService postService;
@ApiOperation(value=“得到ES結果”)
@GetMapping(value=“getList”)
public List
{
List
Tag tag = new Tag();
tag。setId(“1”);
tag。setName(“tech”);
Tag tag2 = new Tag();
tag2。setId(“2”);
tag2。setName(“elasticSearch”);
Post post = new Post();
post。setId(“1”);
post。setTitle(“This is post”);
post。setTags(Arrays。asList(tag,tag2));
postService。save(post);
Post post2 = new Post();
post2。setId(“2”);
post2。setTitle(“Biding2”);
post2。setTags(Arrays。asList(tag));
postService。save(post2);
Page
Page
Page
list。add(posts);
list。add(posts2);
list。add(posts3);
return list;
}
}
九、執行效果
控制檯列印: