范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringBoot整合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;
  }
  }九、运行效果
  控制台打印:

智能手机销量榜出炉,苹果夺得冠军!OPPO负责人道出真相在华为手机业务以及通信业务被不可抗因素影响时,网上流传了一句话华为跌倒,苹果吃饱。然而让人没想到的是,余承东还转发了这句话,表达他对这句话的认可。近期,据多个调查机构公布的数据,今美诋毁华为,国人该买还是买,该换还是换,苹果手机有何魅力?美诋毁和打压华为是众所周知的事情了,为此,网上出现一系列帖子,有人言论说美打压华为,那我们就打压苹果,也有人说美打压华为跟个人使用苹果没有任何联系,还有人说华为手机价格太贵,苹果手荣耀新机进入倒计时,骁龙69566W快充,外观美出新高度文有鱼审核张子扬校正知秋在荣耀手机的产品线中,X系列虽然定位比较低,但多年来却凭借着外观设计影像性能等多方面的优异表现,受到了用户的广泛好评。因此,在荣耀手机业务回归正轨后,一直有骁龙8Gen1新机发布老旗舰就过气?游戏党表示它现在仍然很吸引随着摩托罗拉新机edgeX30的发布,全新一代的旗舰移动平台高通骁龙8Gen1也正式宣布登录市场。据了解,高通骁龙8Gen1采用三星4nm制程工艺,延续着三丛集架构设计,CPU核心大家都说2022年是手机真香年,2022年的手机会降价吗?现在网上流传着一种说法就是2022年是手机真香年,主要原因就是MOTO发了两款新机,处理器型号高到逆天,在今年的早些时候MOTO就担任了急先锋的角色,直接把骁龙870机型的价格拉到骁龙85000mAh1TB存储,真我旗舰来搅局!小米12压力大了随着高通最新旗舰芯片骁龙8Gen1的正式发布,众多旗舰新机都箭在弦上。已经发布的motoedgeX30成为全球首款骁龙8机型,月底发布的小米12将成为第二款搭载骁龙8的旗舰产品。作鸿蒙落榜!华为手机,再次选择了安卓系统前段时间华为海外消费者业务总裁DerekYu表示明年鸿蒙将正式登陆欧洲市场,不少人表示鸿蒙开始迈出发展的关键一步全球化。而想要让鸿蒙登陆欧洲那肯定需要手机,因此在鸿蒙要登陆欧洲市场黑鲨为什么是最好的游戏手机?黑鲨手机是由小米公司旗下的,黑鲨科技小米科技投资研发的主打游戏电竞的手机品牌,从2021年6月22日开始,黑鲨科技已发布9款手机产品,有黑鲨游戏手机黑鲨游戏手机Helo黑鲨游戏手机华为又传来好消息!P50新机5G傍身,芯片来源引猜测最近华为又有新消息曝出,那就是华为P50系列即将迎来一位新成员,那就是华为P50Pocket。然而通过这款手机的数据,我们能看到这款手机的来头可不小。首先,这款手机是华为的新一代折微信打开这1个功能,可以深度清理微信缓存垃圾,很实用大家好,欢迎来到大雨静听生活。微信打开这一个功能可以深度清理微信缓存垃圾,可是还有很多人不知道,非常的实用,今天就分享给大家。首先我们打开微信找到设置,然后选择帮助与反馈,点开帮助电脑C盘空间严重不足?教你彻底清理C盘垃圾,清理后瞬间释放10GB关注职场办公,分享实用干货,洞察科技资讯!大家好,这里是职场科技范你的电脑C盘又飘红了吗?别担心,今天就来教你彻底清理C盘垃圾,轻松给你的C盘瘦身,让红胖子分分钟变成蓝瘦子。一给C
韩美召开高层经济对话,讨论半导体电动汽车基础设施等领域投资合作韩国国际广播电台12月20日报道,韩国外交部第二次官崔钟文与美国国务院负责经济增长能源和环境事务的副国务卿何塞费尔南德斯17日在位于首尔的韩国外交部大楼举行第六次韩美高层经济对话(5款高性价比旗舰,体验近乎完美,不仅配置强大价格还异常亲民您平时使用的手机是什么价位的?相信高性价比的机型应该会占大多数,毕竟没有多少人有实力为了1的提升去多花几百元甚至几千元。那么2021年快要过去了,有哪些便宜又好用的高性价比旗舰供大什么品牌的u盘好?u盘如何挑选?感谢邀请!u盘如何挑选,选择U盘可以从以下几个方面来考虑。一,品牌。要选择质量好的大品牌,不要选些杂牌的U盘。比如金士顿U盘二,容量。选择好了品牌,然后就要选择容量了以黑人牙膏为例,浅析品牌焕新背后不是对传统的一刀切斥资200万,世界级大师操刀,却只磨圆了四个棱角。犹记得今年上半年,小米在品牌发布会上宣布对品牌LOGO进行了升级焕新。官方消息称,小米LOGO由日本知名设计师原研哉操刀,耗时3年互联网时代适合初中生学习的专业有哪些?感谢邀请。无论从事那个行业,最重要的还是需要自身技术过关才行。初中生因为接触的知识点相对高中大学少一些,所以在基础上知识点会有点薄弱,那么先要做的就是把自己的基础打牢,万丈高楼也得作为一个广东人,如果选择一个地方发展,你是会选择深圳还是广州?我会选择广州不说啥就说一个支付的问题像很多打工人大多数都会选择交通工具出行吧比如说公交车和地铁等但是在深圳的话我今年暑假有幸去过我在广州玩的时候都是选择支付宝的乘车码来乘车的但是结快2022年还出翻盖手机?制造业强如日本,为什么其手机却无人问津近日,日本电信公司KDDI和卡西欧合作,推出了一款号称史上最强翻盖机的手机GzOneTYPEXX。这款手机最大的特点就是抗造,比如在水里泡半个小时都依然坚挺,从接近两米的高度砸到钢行业实访,一个快递驿站一年能挣多少钱?行业实访,一个快递驿站一年能挣多少钱?在一个三线城市的新城区,开一个快递驿站,一年能挣多少钱?这是一个粉丝的提问,大王现在就来做个行业实访,告诉你答案。经过协商,这位大姐不愿意出镜IDC三季度全球腕上穿戴设备出货量苹果华为并列第一IT之家12月18日消息,IDC2021年第三季度全球可穿戴设备出货量报告指出,华为在腕上穿戴设备细分领域,2021年Q3的出货量与苹果并列全球第一。据悉,这是继2020年第二季度建一个200平的加油站,需要投资多少钱?一年又能赚多少钱?引言随着汽车数量的增加,每天对于汽油的需求在不断上升。大家有没有过这样一个想法,开一个加油站。前期的准备工作与投入,必然需要花费大量的时间与金钱。但只要办成了加油站,也就不愁吃穿了苹果躺枪?王力宏向李靓蕾道歉用的手机是iPhone13顶配点击右上方关注,第一时间获取科技资讯技能攻略产品体验,私信我回复01,送你一份玩机技能大礼包。近日,关于明星王力宏和前妻李靓蕾的事件,引发大量网友的关注,很多人每天起床第一件事就是