当前位置: 首页>资讯 >

[ES三周年]如何使用SpringBoot 整合ES 报资讯

来源: 腾讯云 | 时间: 2023-03-11 11:14:08 |

引言

平时我们存储数据用的最多的就是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 报资讯

平时我们存储数据用的最多的就是mysql,在前面的文章里我也分享过很多关于mysql的知识,今天我们来集成另外一种数据存储系统ES,它是一款NoSql

2023-03-11

划分南北方的分界线是_各大洲的分界线是什么 环球速讯

1、北部边界线是根据气候划分的。中国中部有一条东西走向的山脉——秦岭。它就像一道“挡风墙”,阻止冬季冷空气南下,拦截夏季

2023-03-11

【聚看点】吴堡人

1、吴堡人志愿者联盟是吴堡人网旗下的组织之一。2、成立与2009年。3、是吴堡县唯一的民间志愿者组织,目前有固定的志愿者

2023-03-11

英国和美国的法律及法学理论_关于英国和美国的法律及法学理论的简介

1、《英国和美国的法律及法学理论》是由理查德·A 波斯(Posner R A )所著,北京大学出版社出版的书籍。本文

2023-03-11

《三体》总制片人:没敢看弹幕 以为会被骂死-环球实时

《三体》电视剧收官之后,好评如潮。总制片人白一骢在接受《中国经营报》记者专访时表示,起初自己并没有信心,整个项目没有任何

2023-03-10

世界看点:盂兰盆经全文拼音_盂兰盆经全文

1、恣拼音:zī盂兰盆法会仪轨一 炉香赞二 祈愿(合掌):我等至诚供养十方诸佛菩萨。2、历代祖师一切圣

2023-03-10

党风廉政建设讲话2023-党风廉政建设讲话

1、去百度文库,查看完整内容>内容来自用户:bpsoc3449党风廉政领导讲话稿3篇  党风廉政教育在党风廉政建设和反腐败斗争中具有重要的作用。2、做好

2023-03-10

当前热讯:北京下周一早高峰、下周五晚高峰通行压力大,持续时间长

北京市交管局3月10日发布的下周北京交通预报显示,本周末本市旅游、购物等出行活动增多;北海、动物园、玉渊潭等城区公园,西单、崇文门等商圈

2023-03-10

素丸子的制作方法_素丸子的制作方法与步骤 快消息

1、配料:面粉、豆腐、鸡蛋、香菜、胡萝卜、盐、食用油。2、将豆腐碾碎备用;3、将胡萝卜搓成丝备用;4、香菜切成1厘米长的

2023-03-10

典韦最强出装暴击和吸血铭文_典韦最强出装

1、首先,打开王者荣耀主页面,在中间下面一栏中找到备战选项。2、点击备战,进入备战后找到左下角英雄头像框,并点击。3、打

2023-03-10

2月份北京CPI环比下降0.4%同比上涨1.2%

2月份北京CPI环比下降0 4%同比上涨1 2%:2月份,受节后需求回落和市场供应充足等因素影响,居民消费价格环比有所下降,同比涨幅回落。从环比看

2023-03-10

霸王龙简笔画_霸王2配置_速看

1、最好需要获得战神之刃天魔之镰和穿透之矛都非常强力哦。以上就是【霸王龙简笔画,霸王2配置】相关内容。

2023-03-10

热文:绝育后的猫怎么照顾_猫咪绝育后怎么照顾

1、一、公猫绝育后的护理2、如果你的猫是公猫,你完全不用担心,只要注意手术时医生有没有给他滴眼药水或者药膏就可以了。此举

2023-03-10

讯息:真香,我看谁还敢骂她?

国产仙侠?哼。狗都不看。最近开播的三部仙侠剧——一部《重紫》,拿着S+级的大制作,却有着一副我就烂怎么了的态度,全程把观众当傻子。一部

2023-03-10

世界速递!强列烧烫伤膏怎么样_烧烫伤膏怎么样

1、烧伤膏具有清热解毒、消肿止痛、生肌等功效。2、适用于轻度烧伤,含有活血化瘀的成分,能有效去除坏死组织,促进伤口愈合。

2023-03-09

猎人学校现在还有吗_猎人学校

1、它要求参加选拔的各国学员在15天内,必须完成20余项实战条件下的险重课目。2、如在匍匐前进中,子弹就在头顶上飞,而被

2023-03-09

世界简讯:再创历史!祝贺吴易昺

北京时间3月9日ATP1000印第安维尔斯大师赛男单首轮比赛中国选手吴易昺(bǐng)2比1逆转西班牙选手穆纳尔闯进第二

2023-03-09

观天下!失业保险领取条件和标准2023年是什么?失业保险可以领多久?

一、失业保险领取条件和标准是什么1、失业保险领取条件:(1)我们需要按照相关法规参加了失业保险,并且所在单位和本人连续缴纳了一年以上才

2023-03-09

注册制通过强化产品体系推动投融资功能改革——注册制改革系列研究之五

申万宏源(行情000166,诊股)研究核心内容摘要:金融产品是打通资本市场投融资功能的重要媒介。融资功能和投资功能是资本市场的基础功能,是资本

2023-03-09

全球今亮点!王育少孤贫为人佣牧羊豕近学堂翻译_王育少孤贫文言文翻译

1、王育小时候是一个孤儿,很贫穷。2、他作为别人家的苦工,负责放牧猪羊(牲畜),其地点离学堂很近。3、王育时常都有空闲的

2023-03-09

资讯

[ES三周年]如何使用SpringBoot 整合ES 报资讯

平时我们存储数据用的最多的就是mysql,在前面的文章里我也分享过很多关于mysql的知识,今天我们来集成另外一种数据存储系统ES,它是一款NoSql

2023-03-11     
划分南北方的分界线是_各大洲的分界线是什么 环球速讯

1、北部边界线是根据气候划分的。中国中部有一条东西走向的山脉——秦岭。它就像一道“挡风墙”,阻止冬季冷空气南下,拦截夏季

2023-03-11     
【聚看点】吴堡人

1、吴堡人志愿者联盟是吴堡人网旗下的组织之一。2、成立与2009年。3、是吴堡县唯一的民间志愿者组织,目前有固定的志愿者

2023-03-11     
英国和美国的法律及法学理论_关于英国和美国的法律及法学理论的简介

1、《英国和美国的法律及法学理论》是由理查德·A 波斯(Posner R A )所著,北京大学出版社出版的书籍。本文

2023-03-11     
《三体》总制片人:没敢看弹幕 以为会被骂死-环球实时

《三体》电视剧收官之后,好评如潮。总制片人白一骢在接受《中国经营报》记者专访时表示,起初自己并没有信心,整个项目没有任何

2023-03-10     
世界看点:盂兰盆经全文拼音_盂兰盆经全文

1、恣拼音:zī盂兰盆法会仪轨一 炉香赞二 祈愿(合掌):我等至诚供养十方诸佛菩萨。2、历代祖师一切圣

2023-03-10