热议:[ES三周年]如何使用SpringBoot 整合ES
引言
平时我们存储数据用的最多的就是mysql,在前面的文章里我也分享过很多关于mysql的知识,今天我们来集成另外一种数据存储系统ES,它是一款NoSql型数据库,主要使用场景有商品搜索,文章搜索等,关键词就是搜索。 我们先简单介绍下ES。
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
这是来自于百度百科的解释,其实我们就直接把它理解成搜索引擎就行了,接下来,我们就开始快速集成,然后上手使用吧!
【资料图】
安装ES
本篇介绍的是如何通过docker安装es,提前你得有docker环境
拉取ES镜像
docker pull elasticsearch:7.6.2复制代码
创建挂载目录
mkdir -p /Users/lezai/docker/volumes/data/elasticsearch/config/mkdir -p /Users/lezai/docker/volumes/data/elasticsearch/datamkdir -p /Users/lezai/docker/volumes/data/elasticsearch/plugins复制代码
编辑配置文件
vim /Users/lezai/docker/volumes/data/elasticsearch/config/elasticsearch.yml复制代码
elasticsearch.yml
http.host: 0.0.0.0复制代码
运行执行脚本
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ -v /Users/lezai/docker/volumes/data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /Users/lezai/docker/volumes/data/elasticsearch/data:/usr/share/elasticsearch/data \ -v /Users/lezai/docker/volumes/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.6.2复制代码
安装成功后
在浏览器输入 http://localhost:9200,如果出现以下内容,则代表安装成功
{ "name" : "43e2638f84ac", "cluster_name" : "elasticsearch", "cluster_uuid" : "hZKT7NQNRl-Dg2Xrb3isGg", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search"}复制代码
配置项目
添加必要依赖
org.springframework.boot spring-boot-starter-data-elasticsearch org.springframework.boot spring-boot-starter-test test org.projectlombok lombok 1.18.18 复制代码
添加实体
其实这里的实体对应的就是ES索引 @Document(indexName = "sys_user") 代表映射的是sys_user 索引 @Field(type = FieldType.Keyword) 代表字段应设在es中是keyword类型
这里就不介绍过多的ES用法
package com.aims.springbootes.entity;import lombok.Builder;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.io.Serializable;import java.util.List;@Document(indexName = "sys_user") //文档@Data@Builderpublic class SysUser implements Serializable { @Id //主键 private String id; //ES中id不能定义为Long private String username; private String password; private int level; @Field(type = FieldType.Keyword) private List roles;}复制代码
添加操作es的dao
ElasticsearchRepository 遵循Spring-data的规范,所以操作es,就相当于我们使用jpa去操作数据库一样
package com.aims.springbootes.dao;import com.aims.springbootes.entity.SysUser;import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Repository;import java.util.List;/** * 第一种方式,类似于JPA,编写一个ElasticsearchRepository * 第一个泛型为Bean的类型 * 第二个泛型为Bean的主键类型 */@Repositorypublic interface SysUserDao extends ElasticsearchRepository {}复制代码
添加配置信息
spring: elasticsearch: rest: uris: http://localhost:9200复制代码
编写test,测试添加数据到ES中
这里通过往ES中塞入1000条数据,我们运行下,但是我们现在不知道有没有插入进去。
@Test public void testInsert() { List list = new ArrayList<>(); list.add("teacher"); list.add("student"); list.add("admin"); list.add("leader"); for (int i = 0; i < 1000; i++) { int toIndex = new Random(1).nextInt(4); SysUser build = SysUser.builder() .password("123456") .username("AI码师") .level(i) .roles(list.subList(0, toIndex)) .build(); sysUserDao.save(build); } System.out.printf("结束"); }复制代码
在编写一个查询的,来验证是否插入成功
@Test public void testFindAll(){ Iterable all = sysUserDao.findAll(); all.forEach((sysUser)->{ System.out.printf(sysUser.getId()); }); }复制代码
到这已经集成了ES,更多Spring-Data语法可以参考JPA的写法,在IDEA中会有很多智能提示,帮助你写的。
集成Spring-data-es后的思考
使用spring-data-es 提供的ElasticsearchRepository 只能进行简单的增删改查操作,如果碰到一些稍微复杂的聚合操作,他就很难应付了,所以这里有几个建议:
如果只需要做简单增删改查操作,直接继承ElasticsearchRepository即可如果项目中有非常复杂的查询或聚合操纵,可以使用结合ElasticsearchRestTemplate做一些复杂的操作,这个包不需要再引用其他依赖,已经集成在spring-data-es里面了。如何利用客户端快速编写ES 语句
这里我要介绍一款软件 kibana,它和es是老组合了,通过它能够直接连接es,直接在页面编写ES语句,值得一提的是它的语法智能提示简直不要太棒了
Docker安装kibana
拉取镜像
这个一定要和es的版本保持一致,防止api不兼容
docker pull kibana:7.6.2复制代码
创建挂载目录
mkdir -p /Users/lezai/docker/volumes/data/kibana/config/复制代码
编辑配置文件
`vim /Users/lezai/docker/volumes/data/kibana/config/kibana.yml
## ** THIS IS AN AUTO-GENERATED FILE **## Default Kibana configuration for docker targetserver.name: kibanaserver.host: "0"elasticsearch.hosts: [ "http://elasticsearch:9200" ]xpack.monitoring.ui.container.elasticsearch.enabled: true
标签:
推荐文章
- 热议:[ES三周年]如何使用SpringBoot 整合ES
- 天天速递!qa_说一说qa的简介
- 全球实时:房屋知识科普:房子三证齐全是哪三证
- 环球快讯:今年泉州市总工会将建40个五星级户外劳动者驿站
- 天天速递!托玛琳的十大功效_托玛琳护肩
- 婚前试爱120分钟完整版乐吧_婚前试爱120分钟完整版_环球热资讯
- 关于读书的成语四字 前沿热点
- 上海市消保委:2022年共受理消费者投诉32万余件
- 天天315|注意!“苹果”店也有假,成都这4家店未取得商标授权被立案调查
- 兔子养多久才会认主人_兔子养多久才会认主人
- 长沙天心区广发“英雄帖” 让科技与人才两翼齐振-焦点短讯
- 你如此爱我歌词歌谱_听我说谢谢你歌词完整版
- 日历2012年
- 莫泊桑的作品_关于莫泊桑的作品的介绍
- 每日头条!机器人对话NEW BING
- 五大连池一日游自驾_五大连池一日游攻略_世界聚看点
- 全球播报:龙虎榜丨世嘉科技今日跌停 上榜营业部席位合计净卖出3465.82万元
- 淘宝网怎样开网店_如何在淘宝网上开网店
- 世界信息:pkpm剪力墙配筋怎么看
- 全球消息!早上洗头好还是晚上洗头好_关于早上洗头好还是晚上洗头好详情内容
- 数字媒体艺术设计专业_关于数字媒体艺术设计专业简介|世界独家
- 卷扬机生产厂家联系方式_卷扬机生产厂家|天天快播
- 文德皇后几个孩子_文德皇后-微头条
- 深交所向容大感光发出关注函
- 大阪大学世界排名_大阪大学-世界播报
- 天天速读:练跆拳道的好处是什么_练跆拳道的好处
- 冒险岛双刀技能书攻略_冒险岛双刀 全球新消息
- [热搜]烟台腹腔镜手术费用大概多少钱【公开透明】|焦点热讯
- 天天观热点:멍청한짓이야_みなみ
- 每日资讯:珙桐是什么植物_珙桐是什么东西
- 工业富联加码国内高端智能制造 赣州园区预计5月投产-世界观焦点
- 东旭光电(000413)3月9日主力资金净卖出134.81万元_全球聚看点
- 圣女果摆盘切法大全_圣女果摆盘
- 龙宇股份3月9日快速反弹 焦点观察
- 阳春三月春日暖 枣庄薛城杏花绽放美不胜收
- 开勒股份董秘回复:公司HVLS风扇未应用于杭州亚运会
- 今日讯!女人的祖母
- 世界简讯:u盘误格式化怎么恢复_误将U盘格式化的常见恢复方法
- 焦点日报:查看特别关心我的人方法_查看特别关心我的好友
- 【全球报资讯】上海长风海洋世界攻略 上海长风海洋世界好玩还是上海海洋水族馆好玩
- 今热点:主场首秀!杨鸣激情指挥,莫兰德强攻王哲林,郭艾伦全副武装
- 万圣节是几月几日?
- 每体:巴萨将在第二场国家德比中身穿印有罗莎莉亚标志的球衣_天天简讯
- 全球快消息!塞罕坝林场指的是哪里_塞罕坝林场的简介
- 世界观热点:小李飞刀演员表
- 易方达萧楠卸任了一个1亿规模的基金
- 环球今日讯!寒食节的习俗
- 环球实时:盐城市神州路实验学校
- 鸿博股份3月8日快速上涨
- 韩美林艺术馆
- 青年山东说|济南地铁青年赵海山:确保泉水万无一失-每日报道
- 短筒袜|观速讯
- 环球热点!青岛保皇在线玩_保皇怎么玩
- 中国最好的绿茶_什么叫绿茶婊-新视野
最新资讯
- 房思琪事件是怎么回事_每日速递
- 泰山体能教练告吹?薛申继续干,崔鹏辅助?康冰:我也纳闷
- 双向选择是什么意思 环球报道
- 星际前线:冲突免wifi验证_对于星际前线:冲突免wifi验证简单介绍|今日热议
- LOL新英雄大招的两个设计方向分析:控制傀儡or佐伊升级版!
- 【环球热闻】抗静电剂
- A股异动|力诺特玻放量涨超5%股价创近一年新高价
- 21朵玫瑰花花语是什么
- 跨越种族的爱恋,美国女子与公海豚发生关系,分开后,海豚殉情_全球快播
- 每日热闻!还原型谷胱甘肽
- 天天动态:贵州纳雍:油菜花开 美景入画来
- 焦点快报!今日晚间原油行情走势分析(3月6日)
- ie缓存提取器
- 天天快报!总投资33.4亿元,辽阳谋划63个重点文旅项目布局全域旅游
- icp经营许可证
- 宏英智能: 中信证券股份有限公司关于上海宏英智能科技股份有限公司使用部分闲置募集资金和闲置自有资金进行现金管理的核查意见 世界快资讯
- 母亲节是什么时候2021年_环球最新
- 90后人大代表带领村民创业致富
- 当前简讯:法拉第未来执行董事长辞职
- 希斯 莱杰
- 游戏升级补丁怎么安装_游戏升级补丁怎么用
- 世界视点!儿童毛线帽子编织方法简单_儿童毛线帽子编织方法
- 白菜馅饺子怎么拌馅不出水_白菜馅饺子
- 看新疆 ∣南疆行④:南疆夜生活的滋味,你不来体验一下吗?
- 柬埔寨属于哪个国家|全球今日报
- 快报:吴狄_关于吴狄的介绍
- 百万亚瑟王闪卡
- 南中医图书馆_南中医经管_关注
- 微机原理与汇编语言程序设计习题解答实验指导和实训_当前观察
- 全球通讯!钟伟安徽_钟伟丁盛
- 世界热头条丨华少念广告词_华少念广告词
- 披“星“戴月!“雷锋班”兵哥哥与“来自星星的他们”牵手|世界热点评
- 红码一般多少天消失 健康码什么情况下是红码|环球新要闻
- 天天快资讯:今天最新消息 重庆市新增本土确诊病例1例 新增本土无症状感染者3例
- 卫生纸属于哪种垃圾?_卫生纸是什么垃圾|环球快看
- 头衔:利息比你想象的高多了!使用花呗分期和白条-每日消息
- 今日关注:东莞积分入户积分标准
- 农历是阴历还是阳历 农历是什么意思-农历是阴历还是阳历 全球动态
- 1.2万人次围观!民生证券股权拍卖引争议 泛海质疑1.25倍PB合理性 世界微速讯
- 耽误的近义词
- 变形计2012_关于变形计2012的介绍 每日速看
- 当前要闻:2022年度全区学雷锋志愿服务先进典型名单公布 我市3个典型上榜
- 苯并噻吩_关于苯并噻吩的简介
- 世界即时:114是电话号码查询吗_114是什么电话查询
- 惠泰医疗: 关于以集中竞价交易方式回购公司股份的进展公告
- 本人就是武汉市的公务员,有些观点要澄清说明一下|今亮点
- 天天热推荐:河北文旅火爆内卷——副厅长出镜带您打卡“周末到河北”
- 2010全国二级建造师执业资格考试教习全书
- 主角出场满级的小说_主角直接满级碾压小说
- 属兔的性格男_属兔的性格 每日速读