[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
- 深圳个人房产立户如何预约?深圳个人房产立户需要哪些条件?
- 深圳房产立户要去哪里办理?深圳市公租房立户网上申办的流程是什么?
- 资观监督(188)丨突然下坠无法开门 市民质疑电梯安全性 部门回应:电梯安全需相关方共同维护 世界快看点
- 深圳公租房可以立户吗?深圳什么样的公租房可以立户?
- 天天头条:北京丽泽城市航站楼枢纽将于2025年建成
- 深圳房产立户要去房产所在地公安局吗?深圳个人房产立户需要哪些条件?
- 世界今日报丨2023新茶饮风向:健康“零卡”、花式上新、价格内卷
- 最新经济数据出炉!9组数字带你看!
- 2023年政府工作报告解读:更加稳健的增长 | 热点观察
- 聚焦3·15丨网购套路多,这份避雷维权指南请收好!:全球播资讯
- 3月15日国内现货锡市场价格上涨
- 最新!资阳公布新闻发言人名单、新闻发布机构电话_当前速递
- 2023年2月份居民消费价格同比上涨1.0%,环比下降0.5%
- 国家统计局:未来就业保持总体稳定有非常好的条件和基础_环球今日讯
- 当前时讯:3月15日河北正元液氨报价持稳
- 聚焦3·15|早买一周,“损失”几个月工资!新能源车快速迭代与降价惹怒老车主_天天即时看
- 统计局:1-2月中国粗钢日产285.93万吨-天天即时看
- 世界播报:外汇局:深化外汇领域改革开放,持续推进跨境贸易和投融资便利化
- 微速讯:3月15日国内现货铅市场价格上涨
- 3月15日黑龙江七台河焦炭市场价格暂稳 当前滚动
- 康姿百德磁性床垫性能优异,给您高质量舒适睡眠体验_世界速读
- 焦点简讯:惠誉:修正全球金属 矿业价格预期
- 广东2023年普通高等学校春季考试招生志愿填报工作17日启动
- 每日视点!试点恢复出境团队游60国全名单来了 请收藏→
- 多地发布艺考改革方案,艺考招生将有这些新变化!
- 放假通知!(不用调休) 全球今日报
- 年轻女企业家“硬刚”制造业 第四届大湾区木棉论坛上多位女企业家分享创业故事-报道
- 天天新消息丨国家统计局:从国内来看 目前经济仍然处在初步恢复阶段
- 全球观热点:中央机关及其直属机构2023年度考试录用公务员笔试成绩和合格分数线公布
- 每日播报!电脑怎样打包装寄快递 电脑打包装寄快递方法介绍
- 耳机突然没声音怎么办 耳机突然没声音解决方法介绍
- 世界快报:举办奥运会最多的国家是哪国 哪国举办奥运会次数最多?
- 世界今头条!免驱usb无线网卡怎么使用 免驱usb无线网卡使用方法介绍
- 太阳能热水器介绍 太阳能热水器简介 世界微头条
- 每日热点:什么软件可以让美图过的图片还原 怎么让ps过的图片还原?
- 不的繁体字怎么写 不是什么意思?
- 失之交臂出自哪里 词语失之交臂的出处是什么?|今亮点
- 非洲大草原有哪些动物 非洲大草原的动物有哪些? 全球热点评
- 支付宝怎么实名认证 支付宝实名制操作步骤介绍
- 【全球新视野】繁体字好听的网名大全 繁体字好听的网名有哪些?
- 安全感歌词是什么 王力宏安全感歌词分享_天天热推荐
- 生旦净末丑的意思是什么 生旦净末丑分别是怎么解释的?|世界报资讯
- 即时焦点:肖战粉丝林苗苗被停职怎么回事 林苗苗事件始末介绍
- 手机怎么捉猫猫 手机捉猫猫步骤是什么? 环球快报
- 西安海拔高度是多少 西安的海拔有多高?
- 特别深爱一个人的句子是什么 特别深爱一个人的句子有哪些? 当前通讯
- 西米露怎么做好吃 好吃的西米露做法介绍:实时
- 再见张震岳歌词是什么 再见歌曲介绍 热门
- 当前关注:底部十字星什么意思 底部十字星的含义是什么?
- 焦点快报!穿越女尊男生子的小说有哪些 穿越女尊男生子的小说推荐
- 凉风日潇洒下一句是什么 凉风日潇洒原文介绍|当前观点
- 环球微速讯:汽车正确发动方法是什么 汽车正确发动方法简述
- 温州龙舟文化介绍 温州龙舟文化有多少年的历史了?
- 播报:水蚤的正确养殖方法是什么 水蚤怎么养殖?
- 低息贷款有哪些 银行贷款利息是多少?
- 哪里可以托运摩托车 摩托车怎么托运? 全球时讯
- 坐飞机行李怎么托运 坐飞机怎么托运行李?
- 全球热点评!三星手机怎么格式化 三星手机格式化方法介绍
- 火烧圆明园是哪一次战争 为什么会火烧圆明园?
- 城堡突袭2龙骑士怎么快速解锁 城堡突袭2龙骑士解锁方法介绍_全球今日讯
- 热资讯!天造地设的近义词是什么 天造地设释义及出处介绍
- 火车票取票流程是什么 火车票取票的方式介绍
- 世界动态:从容不迫的意思是什么 从容不迫的意思有哪些?
- 征信有逾期怎么处理可以消除 征信逾期处理技巧有哪些?
- 天天通讯!请问163电子邮箱怎么修改密码 163电子邮箱密码怎么修改?
- 花呗提前还款在哪里 花呗怎么提前还款?:要闻速递
- 歌韵的近义词是什么 歌韵的近义词有哪些?:时讯
- 香港人均gdp是多少 香港人均gdp与新加坡差距有多大?
- 微头条丨马小跳和安琪儿长大后的结局是什么 淘气包马小跳内容介绍
- 安卓手机如何恢复出厂设置 安卓手机恢复出厂设置的方法介绍
- 水晶珠帘制作方法是什么 水晶珠帘制作方法有哪些?
- 天天滚动:清平乐曹皇后结局介绍 清平乐曹皇后结局是什么
- 沪惠保保障范围是什么 沪惠保保障范围介绍 聚看点
- rcep是什么意思 区域全面经济伙伴关系协定是什么意思?_每日焦点
- 【环球新视野】草鱼的养殖方法是什么 草鱼如何养殖?
- 焦点日报:五帝钱指的是什么 五帝钱的含义是什么?
- 基金分红是好事还是坏事 基金分红都是好事吗?
- 白尾鸢介绍 白尾鸢的食物有哪些?:全球关注
- 闫学晶演过什么电视剧 闫学晶演过的电视剧有哪些?|全球观热点
- 短讯!云南大学选课技巧介绍 云南大学怎么选课?
- 如何确定最优投资组合 最优投资组合是什么?
- 波澜不惊的惊是什么意思 波澜不惊中的惊的意思是什么?
- 退机票手续费怎么收 退机票收多少手续费?_天天快报
- 蓓尔鞋是牌子吗 蓓尔鞋是什么牌子? 环球快消息
- 环球微速讯:谭维维最好听的歌有哪些 谭维维最好听的歌是什么?
- 上海滩黄晓明版演员表介绍 上海滩黄晓明版演员表有谁?-今日精选
- 微头条丨冬虫夏草多少钱一克 冬虫夏草简介
- 弥足珍贵是什么意思 弥足珍贵的含义是什么?
- 购买力平价是什么意思 购买力平价的含义是什么?
- 杜甫字什么号什么 杜甫资料简单介绍
- 如何查看qq特别关心我的人 qq特别关心我的人怎么查看?
- 世界快看:二八理论是谁提出的 二八理论是什么意思?
- 全球视点!速动比率计算公式是什么 速动比率计算公式介绍
- 字节跳动是干嘛的 字节跳动的主要业务是什么?
- 天天亮点!什么叫待用咖啡 待用咖啡的解释是什么?
- 馄饨馅的制作方法介绍 馄饨馅的做法有哪些?
- 那又如何歌词是什么 那又如何原唱是谁?-天天快播报
- 什么是备兑认股权证 备兑认股权证是什么意思?