Spring Boot整合ElasticSearch實現增刪改查基本示例

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工程引入:

org。springframework。boot

spring-boot-starter-data-elasticsearch

注意: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 tags;

}

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 findByTitle(String title, Pageable pageable);

}

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 findById(String id);

Page findByAuthor(String author, Pageable pageable);

Page findByTitle(String title, Pageable pageable);

}

使用了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 findOne(String id);

Iterable findAll();

Page findByTitle(String title, PageRequest pageRequest);

}

指定操作物件:

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 findOne(String id) {

return postRepository。findById(id);

}

@Override

public Iterable findAll() {

return postRepository。findAll();

}

@Override

public Page findByTitle(String title, PageRequest pageRequest) {

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 findById(String id);

BookBean save(BookBean blog);

void delete(BookBean blog);

Optional findOne(String id);

List findAll();

Page findByAuthor(String author, PageRequest pageRequest);

Page findByTitle(String title, PageRequest pageRequest);

}

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 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 findOne(String id) {

return bookRepository。findById(id);

}

@Override

public List findAll() {

return (List) bookRepository。findAll();

}

@Override

public Page findByAuthor(String author, PageRequest pageRequest) {

return bookRepository。findByAuthor(author,pageRequest);

}

@Override

public Page findByTitle(String title, PageRequest pageRequest) {

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 opt =bookService。findById(id);

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> getList()

{

List> list = new ArrayList>();

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 posts = postService。findByTitle(“This is post”, new PageRequest(0, 10));

Page posts2 = postService。findByTitle(“Biding2”, new PageRequest(0,10));

Page posts3 = postService。findByTitle(“Biding2”, new PageRequest(0,10));

list。add(posts);

list。add(posts2);

list。add(posts3);

return list;

}

}

九、執行效果

Spring Boot整合ElasticSearch實現增刪改查基本示例

Spring Boot整合ElasticSearch實現增刪改查基本示例

控制檯列印:

Spring Boot整合ElasticSearch實現增刪改查基本示例