spring boot 进阶(二)springBoot整合ES
这里关于es的下载和启动就不多说了,不会的可以去看我一篇专门讲下载启动的文章:
https://www.jianshu.com/p/a5bf043eec62
然后这里有个注意点:es启动会默认占用2G的内存。如果没这么多空间可以在启动的时候指定大小。
es有两个默认端口9200,9300
- 9200用于外部通讯,基于http协议,程序与es的通信使用9200端口。
- 9300jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9300端口进行通信。
然后es的官方文档的话我不知道为啥es官网总是转啊转啊的打不开,所以这里依然是群文件中下载的中文版权威指南,感兴趣的私我我发你:

这里简单的介绍下es中的概念类比mysql:

然后我们参考es手册来简单的测试下es的添加操作。因为这个传参是json串,所以这里用postman来测试。如下:
ES中添加操作:

下面我们按照这个要求自己来在postman操作:

最后的返回说了已经created了,就是说明创建成功了的。同样我们可以多插入几个好执行别的操作。至于json串我们去手册上找就行了。
ES中查询操作:
刚刚我又手动添加了几条文档,然后接下来我们查询:
es支持restful接口,所以我们换成get方式请求:

这里id是文档id,found:true说明查询到了。source中的查询到的内容。
ES删除操作:
注意,只要把请求方式换成del就会删除:

再次整理下这个接口:
- put是添加和修改(传的id存在的情况下是修改)。
- del是删除。
- get是查询。
需要注意的是一个文档修改以后,version会增加。
然后es中get xx/xx/_search是查询该类型的所有文档。

ES检索
上面简单的查询指定id的,还有全查询不说,es中一些检索功能是很强大的,毕竟一般提起es第一反应就是搜索引擎。
话不说多,es中允许筛选条件是json字符串。
这个其实手册上说的挺全的,我就不一一搬运了,简单来说我个人总结就是有两个强大的功能:分词,权重。
我们可以在全文检索的时候指定一些关键字:比如A,B,C,D
四个关键字都包含的权重最高,排在结果集的上面。只有三个的次之,排在四个都有的下面。只有两个的更低,只有一个的排在最后。这个权重是es实现的。
其实上面说的挺少的,还有很多东西,比如高亮检索,短语检索等。我这里简单说一下高亮,毕竟是挺神奇的东西:

虽然说百度不是用es实现的,但是这个高亮效果就是这样,看到没?搜索的关键字就红了!这个我反正是觉得挺神奇的。
SpringBoot整合ES
上面说了很多都是es本身的东西,但是作为一个java程序员,最终还是要实现springBoot整合es的。SpringBoot支持两种技术和es交互。一种的jest,还有一种就是SpringData-ElasticSearch。
其根据引入的依赖不同而选择不同的技术。反正作为spring全家桶目前是以springdata为主流使用技术。直接说data-elasticsearch了
- 导包
第一步引入依赖没啥好说的。老规矩,去maven仓库里找:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
注意这里要引入springBoot整合es的场景启动器。可以简单看下这个场景启动器里面都有啥依赖:

-
分析自动配置了什么
这里又到了源码时间啦,依然是老规矩,去配置文件中找(既然使用的是data-elasticsearch,肯定要去data包下找,注意源码位置):
es可配置参数
我们呀
其实es中需要配置的参数还挺少的。。除了endpoints剩下就用户名密码了。这里简单的看一下,前缀是spring.elasticsearch.rest.XXX。 -
repository层
这个类似于jpa的用法,也是需要自己写对应的dao层的。type类型在java中就是一个类。而一个java实体对象是es中的一个文档,对象的属性对应es中的属性。对应关系是这样的。
现在我们要自己写respository来操作某个类型。同样这个类型在java中要有对应的实体。如下代码:
实体和dao层写法
几乎和jpa大同小异,重点是实体上这个注解药指定索引和类型。
下面简单的做一些es的crud操作 - es的curd操作
其实这个真的真的真的和jpa好像,也自带了crud方法,我直接使用测试:
添加操作
添加成功
事实证明一个简单的插入操作就完成了。然后我们再看一下别的操作:
加了一个删除一个查询
这里因为查询是个查询语句,所以我只判断这个id存不存在。
下面的接口测试:刚刚我们插入了id是8023的,所以查询在不在正常来讲应该是在的。然后调用删除接口,再查寻在不在。如果是不在说明这两个接口都是正常工作的:
查询删除查询
结果和我们预想的一样一样的,说明这两个接口都正常使用了。
到这,es的简单curd功能就这样了。
其实es可以讲的东西有好多,但是因为我们这里只是简单的说一下整合,仅仅作用于入门,所以这里就不多说了,毕竟想要吃透es我觉得是个很难的事。小小的吐槽一下之前我一直宛若神人的讲师雷神,感觉讲进阶课程以来也终于不像是框架是他写的那么熟悉了。当然了我没别的意思,依然觉得雷神相当厉害,但是术业有专攻。有可能真的是接触的少呢。比如我工作了三年多了,也就是在demo 中 自己琢磨过es玩,一点实践经验都莫得,贼可惜。
本篇笔记也就记到这里了,越来越觉得这个进阶课程不是教各种技术的用法,而是如何整合别的技术,其核心就是自动配置。第一看配置属性类对应配置属性。第二看自动配置类看都配置了什么怎么用。有点失望与真正三方技术整合的过于浅显。但是其实按照这个教学时长也是能理解的事,毕竟这个课程主要说的还是springBoot。反正就这样吧,本篇笔记如果帮到你了记得点个喜欢点个关注。另外spring Boot 1.x和2.x大不相同,如果遇到问题了欢迎留言或者私信我大家一起讨论解决!祝大家工作顺顺利利!平安夜快乐!