全球热议:[ES三周年]如何使用SpringBoot 整合ES
平时我们存储数据用的最多的就是mysql,在前面的文章里我也分享过很多关于mysql的知识,今天我们来集成另外一种数据存储系统ES,它是一款NoSql
平时我们存储数据用的最多的就是mysql,在前面的文章里我也分享过很多关于mysql的知识,今天我们来集成另外一种数据存储系统ES,它是一款NoSql型数据库,主要使用场景有商品搜索,文章搜索等,关键词就是搜索。 我们先简单介绍下ES。
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
【资料图】
这是来自于百度百科的解释,其实我们就直接把它理解成搜索引擎就行了,接下来,我们就开始快速集成,然后上手使用吧!
本篇介绍的是如何通过docker安装es,提前你得有docker环境
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;}复制代码
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复制代码
这里通过往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 提供的ElasticsearchRepository 只能进行简单的增删改查操作,如果碰到一些稍微复杂的聚合操作,他就很难应付了,所以这里有几个建议:
如果只需要做简单增删改查操作,直接继承ElasticsearchRepository即可如果项目中有非常复杂的查询或聚合操纵,可以使用结合ElasticsearchRestTemplate做一些复杂的操作,这个包不需要再引用其他依赖,已经集成在spring-data-es里面了。如何利用客户端快速编写ES 语句
这里我要介绍一款软件 kibana,它和es是老组合了,通过它能够直接连接es,直接在页面编写ES语句,值得一提的是它的语法智能提示简直不要太棒了
这个一定要和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
关键词:
平时我们存储数据用的最多的就是mysql,在前面的文章里我也分享过很多关于mysql的知识,今天我们来集成另外一种数据存储系统ES,它是一款NoSql
张译未宣传狂飙引发猜测和剧组闹掰了?今天的关注度非常高,直接上了热搜榜,那么具体的是什么情况呢,大家可以一起来看看具体
欢迎观看本篇文章,小勉来为大家解答以上问题。荥怎么读音,荥的读法是什么很多人还不知道,现在让我们一起来看看吧!1、英的拼
1、“衰”在文言文中的意思是“事物由盛而衰”,常用来比喻一个王朝的衰败。出自归有光《张翁八十寿序》:“赐于旧家,有悠久之
中新经纬3月11日电(陈俊明)多地住房公积金政策出现新的变化。中新经纬梳理发现,南京、驻马店等地力推“带押过户”,扬州、咸阳等地支持“商转
住房和城乡建设部部长倪虹近日表示,关于房地产有这样一个概括:456。房地产的相关贷款占银行信贷的40%,房地产的相关收入占地方综合财力的50%
1、韩国歌手辉星演唱的歌曲。2、在韩国快速窜起的新生代R u0026B天王“辉星”(WHEESUNG),其表现不仅获致
2023年3月11日,CCTV5将在14:00-16:30、19:00-22:30两个时间段直播WTT新加坡大满贯首日赛事。3月11日,国乒最后一场比赛是国乒大美女陈梦对阵
1、液化气减压阀的工作由阀后压力进行控制。2、当压力感应器检测到阀门压力指示升高时,减压阀阀门开度减小;当检测到减压阀后
1、选择一个地方。首先确定画在哪里,客厅?卧室?一项研究?楼梯?厨房?或者工作室。2、选择你最喜欢的画。有绘画基础的朋友
北京时间3月6号,一位女士在湖南长沙拍摄到湘江里出现大量鱼群,上传网上之后迅速冲上了当地热搜榜,引发网友关注和讨论。由于出现的鱼群过多
大家好,小太来为大家解答以上问题。香港警方回应网红阿秋自行车被偷很多人还不知道,现在让我们一起来看看吧!1、想必大家现在对于香港警方回
1、小学生谚语大全一、朋友与敌人有福同享,有难同当。2、2.邻居好,赛金宝。3、3.远亲不如近邻,近邻不抵对门。4、4.
佛山50公里徒步不同区的见证册可以通用吗?答:不可以。五区徒步行见证册是不一样的,不建议大家拿不同路线图的见证册去走。因为每条线都盖的
1、并拍照复制双通双断开关的图片——。右键点击PPT中的图片3354,粘贴图片3354,复制交换机的另一张图片。2、HO
1、河北广电信息网络集团股份有限公司是经河北省政府批准,以广电网络资产为基础,以资本为纽带。2、通过行政推动、市场运作的
朔州市气象台2023年3月10日9时22分发布沙尘蓝色预警,预警区域:全市。预计未来12小时预警区域内可能出现扬沙或浮尘
中信证券研报指出,2月我国CPI同比读数回落至1 0%(前值为2 1%),低于一致预期的1 8%,“春节错月效应”是最重要的影响因素。此外,服务业劳
1、:倒水,泼水;瓴:盛水的瓶子。2、字面上的意思是在很高的屋顶上把瓶子里的水倒下来。3、而现在用这个成语所表示的意思已
四维图新3月9日公告,公司拟转让共计11家孙公司(简称“标的孙公司”)之股权。标的孙公司系公司子公司中寰卫星导航通信有限