5分钟_SpringBoot集成ES实现存储、查询

当前文章使用ES版本为6.4.3,SpringBoot版本为:2.1.8.RELEASE
spring-boot-starter-data-elasticsearch本为:2.1.8.RELEASE

spring-boot-starter-data-elasticsearch介绍

spring-boot-starter-data-elasticsearch:是springboot整合es的一个快速开发包。用过JPA的朋友应该知道,springdata是通过解析方法名来实现查询数据库的。同样的这个快速开发包也是大大简化了Java使用es的流程。

ik分词器

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。也可以引入其他的中文分词器,本文使用IK分词器,注意:IK分词器的版本号,要与ES的版本一致,如不一致则无法启动。
如果不引入中文分词器,那么ES会默认将每一个中文都会进行分词,不会智能组词。

下载地址:
https://github.com/medcl/elasticsearch-analysis-ik/releases

源代码:
https://github.com/medcl/elasticsearch-analysis-ik

搭建springBoot工程

导入依赖

可以在创建工程时候进行选择web、ES的依赖,也可以手动进行添加。

  • 创建工程时候勾选


  • 手动添加

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--可以只添加上方两个依赖即可推荐添加下方依赖,可以简化代码,不需要在实体类中书写getter和setter方法。如果idea/eclipse报错,请安装lombok插件。--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

编写配置

application.yml

spring:data:elasticsearch:cluster-name: myes#      cluster-nodes: 127.0.0.1:9300cluster-nodes: hadoop137:9300,hadoop138:9300,hadoop139:9300

编写代码

实体类 TestBean

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.io.Serializable;
import java.util.List;import lombok.Data;
//通过这个注解,可以不用写gettersetter方法
@Data
//通过这个注解可以声明一个文档,指定其所在的索引库和type
@Document(indexName = "testdoct", type = "testbean")
public class TestBean implements Serializable {public TestBean() {}public TestBean(long id, String name, Integer age, String sex, String desc) {this.id = id;this.name = name;this.age = age;this.sex = sex;this.desc = desc;}// 必须指定一个id,@Idprivate long id;// 这里配置了分词器,字段类型,可以不配置,默认也可@Field(analyzer = "ik_smart", type = FieldType.Text)private String name;private Integer age;@Field(analyzer = "ik_smart", type = FieldType.Text)private String sex;@Field(analyzer = "ik_smart", type = FieldType.Text)private String desc;
}

DAO层 TestDao

import org.springframework.data.domain.Page;
import org.springframework.data.repository.CrudRepository;import java.util.List;import top.wintp.estestboot.estestboot.bean.TestBean;/*** @author: pyfysf* <p>* @qq: 337081267* <p>* @CSDN: http://blog.csdn.net/pyfysf* <p>* @blog: http://wintp.top* <p>* @email: pyfysf@163.com* <p>* 继承CRUD,第一个泛型是实体类类型,第二个泛型是id的类型*/
public interface TestDao extends CrudRepository<TestBean, Long> {List<TestBean> findByName(String name);List<TestBean> findByNameOrDesc(String text);
}

Service层,TestService (面向接口编程)

import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;import java.util.List;import top.wintp.estestboot.estestboot.bean.TestBean;/*** @author: pyfysf* <p>* @qq: 337081267* <p>* @CSDN: http://blog.csdn.net/pyfysf* <p>* @blog: http://wintp.top* <p>* @email: pyfysf@163.com* <p>* @time: 2019/9/17*/
public interface TestService {Iterable<TestBean> findAll();void save(List<TestBean> list);void save(TestBean bean);List<TestBean> findByName(String text);List<TestBean> findByNameOrDesc(String name,String desc);
}

service的实现 TestServiceImpl


import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import top.wintp.estestboot.estestboot.bean.TestBean;
import top.wintp.estestboot.estestboot.dao.TestDao;
import top.wintp.estestboot.estestboot.service.TestService;/*** @author: pyfysf* <p>* @qq: 337081267* <p>* @CSDN: http://blog.csdn.net/pyfysf* <p>* @blog: http://wintp.top* <p>* @email: pyfysf@163.com* <p>* 添加数据是模拟的*/
@Service
public class TestServiceImpl implements TestService {@AutowiredTestDao testDao;@Overridepublic Iterable<TestBean> findAll() {return testDao.findAll();}@Overridepublic void save(List<TestBean> list) {list = new ArrayList<>();String namess = "帆乘   楷栋   锋枫   海勇   康帆   安礼   晓平   良帆   瑞翱   涛锟   恒勇   鸿驰   帆强   桓柏   锋寅   博槐   骞琛   桓钊   杰桓   裕枫   福晖   槐仕   奇鹏   骏伟   允潍   乘初   杞郁   柏安   皓宇   骏侠   礼德   哲晓   伟权   祥恒   澄震   浩浩   瑞权   延升   翱楷   锋轩   驰鹏   杞翱   康鹤   材福   晖锐   信恒   凯锦   诚翱   震福   龙宇   祥帆   梓瑞   林龙   日延   槐翰   日寅   起鸿   杞允   瑞锐   仕星   权铭   吉楷   寅星   林帝   皓仕   卓礼   家盛   海寅   盛胤   年禧   畅安   炳龙   柏晖   诚年   彬坤   礼诚   濡凯   驰晨   恒邦   帆晖   诚华   晖星   恒梓   禄彬   鹤华   锟升   桓浩   振尧   祥寅   楷辰   暄帝   锐梓   恒佑   文安   杰畅   加琛   俊泽   乘驰   禄家   中鹤   家锦   皓初   凯震   文韦   彬澄   起哲   海炳   鹤锋   贤逸   哲佑   海信   逸俊   炳年   礼郁   濡寅   晓泽   然延   喆加   天梓   泽锟   轩谛   盛翱   晨子   诚吉   梁鹤   仕逸   升平   奇琛   杞沛   胤邦   辰佑   骞佳   鸿鹏   翱坤   钊峰   哲锐   腾鑫   海阳   烁奇   安芃   浩瑞   星尧   驰炳   安沛   权成   华文   杞晨   柏柔   权彬   祯晨   谛潍   驰安   安日   谷沛   帆华   林翰   然震   琛星   泽杞   澄涛   龙欣   嘉辰   海禄   诚家   帆韦   澄濡   潍延   郁邦   锐礼   蔓材   畅震   腾诚   峰贤   轩潍   凡信   翱年   祜帆   睿吉   祯博   强延   震鑫   邦郁   禧祯   良梁   烁谛   成震   翱颜   加升   荣俊   晨骞   锦槐   烁安   鑫平   沛凯   德升   炳宇   远侠   晖鹏   腾谷   初帆   林然   中禄   斌颜   颜浩   远帆   胤然   祜沛   允锟   畅梁   栋材   泽柔   远锐   杞梁   凯濡   郁槐   家泽   暄乘   年权   文柏   潍禧   澄禧   奇锦   逸然   翰弘   华海   柏辞   瑞星   胤佑   芃嘉   祜胤   逸杰   杰逸   材龙   允升   加韦   逸福   桓辞   枫濡   信然   栋祯" +"蓓菡   娜嘉   碧珊   菲昕   芸帆   怡莉   鸿莲   曦静   灵玥   橘婧   家曼   鹤丽   岚琳   格梅   呈梦   璇嘉   月欣   楠敏   瑶丽   茹莲   杉歆   帆珍   琬彬   蓓昭   函璇   凌欢   歆蔚   妮萱   琛灵   婷媛   琳凌   岚冬   静鸿   珍倩   桂枫   玉岚   紫涵   桃婧   芳璟   韵珠   香萱   冰梅   桂寒   呈曼   梅茹   雯帆   芙明   紫桂   霞玲   蓓莉   霞可   琪香   菲春   美俊   梦栀   鹤婧   帛菲   静芝   琳沛   玥薇   璟漫   弦茹   彦茜   花梓   歆曦   寒洁   莉梓   颖芙   梓露   玉诗   桃橘   鹤霞   沛漫   月婧   玲阳   雅欢   珍月   璟紫   歆淑   韵琬   月玉   欢彦   寒娅   妍彤   梦萱   蕾芳   心彤   彩妮   寒玲   淑漫   茜桐   春楠   洲茜   月嘉   欣云   珠香   岚韵   娜呈   妮弦   芸函   芳寒   萱林   云琳   莲菡   碧娅   莉凌   栀茜   蔚妮   惠婧   香心   初莉   颖淑   凡芝   璇灵   可蕾   静文   彩鹤   芙鑫   花楠   云梦   菲茹   蓓玥   惠娅   凌芳   柔旭   琛楠   雪娜   蕾诗   芸珠   菡桂   蕾文   桃花   彩诗   彬洁   帆馨   雯春   芝韵   春雅   静紫   寒橘   冰淑   韵露   昭莲   诗晨   钰花   彩月   昕欢   香可   菲婧   橘静   钰韵   霞心   彬雅   芙春   菲惠   萱曦   惠枫   舒薇   楠丽   栀珍   琳惠   歆冬   漫月   莲琛   琬梓   雨美   梦家   倩慧   俊薇   彬璇   敏玉   栀曼   曦倩   蓓蔚   月茜   俊珍   茹帆   璐欢   芝珊   昕舒   娅璐   慧玉   春玥   舒静   颖楠   淑紫   漫彩   欢曼   芳歆   桂冰   芙薇   旭雅   璇冰   岚欣   岚玲   慧锦   克霞   萱丽   采碧   洁昭   采彩   珊云   漫梦   萱凌   怡文   霞杉   敏怡   莉怡   怡露   格漫   瑶薇   沛菲   彦梦   妮馨   菲萱   敏桐   鹤菡   彬蓓   凌彤   珊莉   漫依   琪莲   欣霞   璟心   梅薇   寒蓓   倩梓   采娜   琬雯   枫梅   花格   馨可   杉璐   舒娅   沛香   颖茹   格玲   花柏   雨璟   欣薇";String[] names = namess.split("\\s+");String[] descArr = {"大家好,我是雨天,因为刚好出生在雨天,老爸又刚好姓夏,于是“下雨天”就首发出场了,而且妈妈也希望我如雨后春笋、天天向上哦!呵呵后来因为一部分人实在不忍心在晴朗的天气里叫我雨天,为避免引起“混乱”,就只好舍弃了这个颇有个性的简单名字,退而成“小名“了。我的大名也简单,其实就一个“翌”字,因为我出生的日子刚好是爸爸妈妈结婚2周年纪念日的第二日。“夏翌”谐音宁波话“暇意”,大家希望我暇暇意意,呵呵,有点嫌”翌”字太文绉绉,就把它给拆了,一分为二成羽立了。", "大家都说我是个阳光女孩,因为我是开心果啊。我老是坐不住,呵呵,能跟小椅子成为好朋友,是老师和爸爸妈妈现在的最大心愿。我喜欢跳舞,但最好能跟着音乐自己起舞,不用按老师的要求练基本功;我喜欢画画,但最好是信手涂鸦,把小朋友的脸画成绿色也没关系;我喜欢溜冰,但最有趣的还是约上三五好友,一起练习如何摔跤……", "昀昀是我在妈妈肚子里时的小名哦,我的大名叫曹铁瀛,妈妈怀我的时候和单位里的阿姨们玩牌经常是百战百胜,阿姨们说是因为我的缘故,干脆就叫“天赢”好了,爸妈取其谐音,就变成了“铁瀛”", "嘿!我——21号来报到了!智诰、诰诰、阿诰,你们爱怎么叫就怎么叫吧!反正都是我!我的名字是奶奶请一名先生取的,虽然有点迷信,但寄托了全家人的祝福!", "还是汽车发烧友,小轿车、大卡车、集装箱、大客车、翻斗车、压路机……应有尽有(就差拖拉机还没有报到)。我常在家练习倒车、移库、爬坡、过单轨桥,考取驾照不成问题!!当然我也模拟制造几起车祸,掉进大河,深沟,追尾事故,因为那时我又能大显身手,汽车的零件装了又拆,拆了又装……哈哈!!角角落落都是我的杰作,缺胳膊少腿的,七零八落的,尽管汽车多,可完完整整的没几辆!这下,又有理由去买车啦!", "我还喜欢画画。从小我就拿着笔画一个个的大圆圈,每天乐此不疲,整整画了半年多圆圈呢!够有毅力的吧!老师说我构图线条流畅,就是那样练出来的哦!以后我一定会继续努力的!可是我不太喜欢看书,妈妈让我看书,我老是心不在焉,左顾右盼,常常惹她不高兴,可我就是不喜欢嘛!", "我的性格有点内向、腼腆、不喜欢“显山露水”。我最喜欢体育项目了,最“痴迷”的就是体育频道:乒乓球、羽毛球、台球、足球、篮球、跳水~~,当然我也喜欢打牌(这可是遗传)。", "我的个子很高,被称为“帅哥”,因此彼得女孩子的欢心哦,等我长大了,我要娶七个“老婆”,其中三个为:外婆、爸爸和妈妈。 我的目标是考上北大。\n", "我当时的第一反应是:这两个字可以跟名人的名字做一个联系,然后做一个介绍。我说你介绍的时候可以跟别人讲:"};Random random = new Random();//模拟数据for (int i = 0; i < 100; i++) {int i1 = random.nextInt(names.length);int i2 = random.nextInt(descArr.length);//注意这里 第一个参数是id 所以无论你运行多少次,都只会添加100条数据,如果id存在es更新,不存在添加TestBean testBean = new TestBean(i, names[i1], i, String.valueOf(i % 2), descArr[i2]);list.add(testBean);}testDao.saveAll(list);}@Overridepublic void save(TestBean bean) {testDao.save(bean);}@Overridepublic List<TestBean> findByName(String text) {return testDao.findByName(text);}@Overridepublic List<TestBean> findByNameOrDesc(String text) {return testDao.findByNameOrDesc(text,text);}
}

TestController


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;import top.wintp.estestboot.estestboot.bean.TestBean;
import top.wintp.estestboot.estestboot.service.TestService;/*** @author: pyfysf* <p>* @qq: 337081267* <p>* @CSDN: http://blog.csdn.net/pyfysf* <p>* @blog: http://wintp.top* <p>* @email: pyfysf@163.com* <p>*/
@RestController
@RequestMapping("/testes")
public class TestController {@AutowiredTestService testService;@RequestMapping("findAll")public Iterable<TestBean> findAll() {return testService.findAll();}@RequestMapping("list")public String save() {List<TestBean> list = null;testService.save(list);return "success";}@RequestMapping("save")public void save(TestBean bean) {testService.save(bean);}@RequestMapping("findByName")public List<TestBean> findByName(String name) {return testService.findByName(name);}@RequestMapping("findByNameOrDesc")public List<TestBean> findByNameOrDesc(String text) {return testService.findByNameOrDesc(text);}}

测试

启动程序会自动创建testdoc索引库

通过kibana查看:

调用项目接口:
http://localhost:8080/testes/list

表示添加成功。

可以通过kibana界面查看并搜索数据,也可以直接调用我们自己写的findAll接口进行查询。


测试findByName:
http://localhost:8080/testes/findByName

测试findByNameOrDesc:
http://localhost:8080/testes/findByNameOrDesc?text=浩

查询名字中或者desc中含有“浩”的数据

结语

这就是SpringBoot集成ES的基本步骤,相比较于自己引入ES的依赖要简单的很多。如果对你有帮助,请分享出去吧。
对于更多的JPA的方法命名规则请查看JPA官方介绍。大致上都和SQL语句差不多。

5分钟_SpringBoot集成ES实现存储、查询相关推荐

  1. SpringBoot 集成 ES 7.6.2 并对字段进行中文和拼音分词处理

    前言 在最近做的流媒体项目中需要集成 ES 搜索引擎,目前 ES 最新版本为 7.x 版本,在以往的项目中我都采用的是 spring 集成的 spring-data-es, 使用自定义类集成 elas ...

  2. 各式结构化数据 动态 接入-存储-查询 的处理办法 (第二部分)

    各式结构化数据的动态接入存储查询,这一需求相信有很多人都遇到过,随着实现技术路线选择的不同,遇到的问题出入大了,其解决办法也是大相径庭.数据存储在哪儿,是关系型数据库,还是NoSQL数据库,是MySQ ...

  3. SpringBoot集成ES 7.6.2 并对字段进行中文和拼音分词处理

    文章目录 前言 一.为什么不用spring封装的spring-data-es? 二.springboot集成es的两种方式 1.spring-data-es使用elasticsearch 2.doc对 ...

  4. 【Java进阶】Spring Boot集成ES

    目录 spring boot集成ES ElasticSearchConfig 测试文档的基本操作 Elasticsearch Clients 文档 spring boot集成ES Java REST ...

  5. android新闻管理,Android资讯新闻类App(头条、网易等),频道管理集成之数据库存储...

    Android资讯新闻类App(头条.网易等),频道管理集成之数据库存储 发布时间:2019-01-16 19:55, 浏览次数:305 , 标签: Android App * 经常看新闻类的大家都知 ...

  6. Java使用Springboot集成Es官方推荐(RestHighLevelClient)

    SpringBoot集成ElasticSearch的四种方式(主要讲解ES官方推荐方式) TransportClient:这种方式即将弃用 官方将在8.0版本彻底去除 Data-Es:Spring提供 ...

  7. es解决只能查询10000条数据方案

    引言 在使用es进行数据查询时,由于es官方默认限制了索引一次性最多只能查询10000条数据,查询第10001条数据开始就会报错, 错误的内容大致为:Result window is too larg ...

  8. ES中SQL查询详解

    一.Elasticsearch SQL简介 Elasticsearch SQL 是一个 X-Pack 组件,它允许对 Elasticsearch 实时执行类似 SQL 的查询.无论是使用 REST 接 ...

  9. ElasticSearch——Spring Boot 集成 ES 操作详解

    文章目录 ElasticSearch--Spring Boot 集成 ES 操作详解 1.SpringBoot 集成 ES 2.索引的API操作详解 3.文档的API操作详解 ElasticSearc ...

  10. 各式结构化数据 动态-接入-存储-查询 的处理办法 (第一部分)

    各式结构化数据的动态接入存储查询,这一需求相信有很多人都遇到过,随着实现技术路线选择的不同,遇到的问题出入大了,其解决办法也是大相径庭.数据存储在哪儿,是关系型数据库,还是NoSQL数据库,是MySQ ...

最新文章

  1. 在 Linux 中使用ImageMagick命令行操作图像文件
  2. 北大青鸟口碑好才真的好
  3. Redis - 事务操作与详解
  4. PYTHON调用JENKINS的API来进行CI
  5. 计算机启动操作系统的过程,操作系统启动过程
  6. 键盘压缩背景,ios滚动不流畅,禁止遮罩层下面内容滚动
  7. Java之StringBuffer类
  8. 学习LOAM笔记——特征点提取与匹配
  9. lenovo 一键恢复6.0 NOVO下密码遗忘的解决方案
  10. linux 下 MySQL卸载和安装
  11. svn服务器如何扫描文件,基于文件仓库进行建模协作(EA+SVN)
  12. mongoDB简单介绍及安装
  13. python利器-bluepy 一款python封装的BLE利器简单介绍
  14. 物联网卡焊接式和插拔式各有什么优势
  15. WebReBuild年会流水记
  16. [redis]redis五种数据类型和应用场景
  17. 基于 Spark推荐 系统应用 现 状
  18. 如何快速去除PDF的密码和限制:遇到PDF被加密,不能复制、编辑,怎么办?教大家一个又快又好用的方法、实用。
  19. springboot uniapp小说阅读APP源码
  20. linux读usb蓝牙数据,嵌入式Linux下USB蓝牙设备驱动.pdf

热门文章

  1. python之parser.add_argument()用法——命令行选项、参数和子命令解析器
  2. 软件工程师能力自我评价表
  3. 【ASP.NET Core分布式项目实战】(三)整理IdentityServer4 MVC授权、Consent功能实现...
  4. LNBP11L_LNB电源和控制电压调节器——科时进商城
  5. 用python画奥特曼_你都用 Python 来做什么?
  6. Java学习笔记——十大经典排序算法总结
  7. 交换机连接路由器计算机联网,交换机上连接路由器_连上路由器(交换器)后部分电脑无法上网的解决方法_交换机上接路由器...
  8. 2018年腾讯春招实习【CDG事业群产品策划岗】面试心得【已录用】
  9. mac 如何安装/运行 kakfa
  10. 企业微信自建应用手动授权,获取用户详细信息