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

2023-03-12 15:06: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

来源:腾讯云 2023-03-12 15:06:08

全球速读:植物为什么需要水分?

来源:互联网 2023-03-12 11:14:01

杨炎华简历_李炎华

来源:互联网 2023-03-12 07:58:48

孔尚任 桃花扇 原文_孔尚任桃花扇原文-视讯

来源:互联网 2023-03-12 01:00:22

平安车险出险记录查询(平安车险出险快吗)

来源:互联网 2023-03-11 20:26:02

《使命召唤14》,还原真实的二战体验|世界报道

来源:叶紫网 2023-03-11 16:14:49

乘法交换律_说一说乘法交换律的简介 世界热头条

来源:互联网 2023-03-11 12:56:19

环球聚焦:斗转参横

来源:互联网 2023-03-11 11:23:57

义乌同年哥讲新闻今晚回放_义乌同年哥讲新闻

来源:互联网 2023-03-11 08:58:52

怎么扫描文件到邮箱_怎么扫描文件到电脑上

来源:互联网 2023-03-11 05:44:19

厦门8岁男孩单手成功完成4层汉诺塔用时4.305秒 天天最资讯

来源:东方资讯 2023-03-11 01:21:57

神火股份(000933):2023年第一次临时股东大会决议公告,审议通过关于确认部分董事、监事2021年度薪酬的议案等议案 世界热点

来源:自选股智能写手 2023-03-10 21:37:21

成本核算的要求 天天速读

来源:互联网 2023-03-10 20:10:31

重药控股(000950.SZ)及下属公司2023年度拟申请不超343亿元融资额度

来源:智通财经 2023-03-10 18:41:27

春融期这些安全提示要牢记|焦点消息

来源:百家号 2023-03-10 16:47:49

天天快看:泰安市人力资源和社会保障网站_泰安市人力资源和社会保障局查询

来源:互联网 2023-03-10 14:37:14

全球观天下!兆易创新:公司2022年第三季度报告中披露,第三季度期末现金及现金等价物余额为64.58亿元

来源:证券之星 2023-03-10 14:34:06

2023癸卯年150克方形金币价格(2023年03月10日)|热消息

来源:金投网 2023-03-10 12:00:31

世界快报:内蒙古发布沙尘暴黄色预警

来源:央广网 2023-03-10 10:00:46

现值是什么意思举例说明_现值是什么意思

来源:互联网 2023-03-10 09:18:52

信科移动(688387)3月9日主力资金净卖出3105.03万元 焦点热门

来源:证券之星 2023-03-10 07:52:37

全球视点!痤疮的潜在诱因包括含糖食物

来源:互联网 2023-03-10 02:44:44

天天快看点丨腌咸蒜的正宗方法与步骤_腌咸蒜的正宗方法

来源:互联网 2023-03-09 23:14:31

车企降价促销潮蔓延;5G消息工作组理事单位座谈会即将召开丨明日主题前瞻

来源:第一财经 2023-03-09 22:38:58

今日Microsoft .NET Framework 3.5 Service Pack 1_解决NET Framework 3.5 Service Pack 1安装慢

来源:互联网 2023-03-09 20:02:54

天天新动态:佛山建设发展拟发行7亿元公司债券,期限为2年

来源:乐居财经 2023-03-09 17:47:58

杭州到北京机票时刻表_杭州到北京机票-天天速递

来源:互联网 2023-03-09 17:10:53

当前快报:央视新剧今晚开播,6位实力派坐镇,我断言:这剧一播出就会爆

来源:青石电影 2023-03-09 16:09:58

天天亮点!霍啸林_霍啸林的六个老婆

来源:互联网 2023-03-09 14:17:52

升功率干到170匹了?福特“彪马”ST上新

来源:懂车帝 2023-03-09 12:09:03

Copyright   2015-2022 华东知识产权网 版权所有  备案号:京ICP备2022016840号-41   联系邮箱:2 913 236 @qq.com