雷丰阳springboot之检索之elasticsearch整合

2021/5/5 10:55:53

本文主要是介绍雷丰阳springboot之检索之elasticsearch整合,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 搭建环境
  • 搜索镜像
  • 下载镜像
  • 运行镜像
  • 测试一下
  • es快速入门
  • 例子理解基本概念
  • 保存数据
  • postman发送请求
  • 检索文档
  • 轻量搜索
  • 查询表达式搜索
  • 全文搜索
  • 短语搜索
  • 高亮搜索
  • springboot整合es
  • 创建新的工程
  • es自动配置做了什么
  • 总结-1
  • jest自动配置
  • spring data ElasticsearchAutoConfiguration
  • elasticsearchClient
  • 1 - elasticsearchDataAutoConfiguration
  • 2 - ElasticsearchRepositoriesAutoConfiguration
  • 3 - 总结
  • 4 - 注释
  • 5 - 导入jest
  • 6 - jest自动配置
  • 7 - application.properties
  • 8 - 启动
  • 9 - 需要先写个bean
  • 10 - 测试JestClient操作ES
  • 11 - 测试使用Jest来进行搜索
  • 12 - Jest其他的操作
  • 0 - 整合spring data es模块
  • 1 - 操作pom文件
  • 2 - application.properties
  • 3 - 启动项目
  • 4 - spring data 官方文档
  • 5 - 分析当前spring-boot版本适配关系
  • 6 - 解决方法
  • 7 - 请注意
  • 8 - 安装2.4.6的es
  • 9 - 修改application.properties
  • 10 - 再次启动项目
  • 11 - 总结
  • 12 - ElasticsearchRepository
  • 13 - 子接口
  • 14 - 测试给ES保存数据
  • 15 - 接口ctrl+f12
  • 16 - 接口自定义方法
  • 17 - ElasticsearchTemplate的使用例子

image-20210504144711757

image-20210504144735002

Lucene是一个开源的,搜索引擎软件工具包。

这个开源的库,如果我们想要直接用,我们就必须,自己写代码,来调用它里面的API,是比较麻烦的。

ES相当于,是对Lucene的一层封装,并且ES提供Restful API的接口。

我们可以直接发送请求的方式,就可以操作ES。

大型网站:维基百科、stackoverflow、github都是用es的。

搭建环境

连接上我们的虚拟机。

搜索镜像

image-20210504145023740

下载镜像

image-20210504145116142

运行镜像

es是用java写的,默认初始会占用2个G的堆内存空间。

我的虚拟机内存空间不够的。

我们可以加上一个-e的命令,来限制它的堆内存空间使用,要不然,可能会启动报错的。

更加详细的信息,可以参照官方的文档。

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 [IMAGE ID]

es默认使用的端口是9200的,当分布式的情况下,es各个节点之前的通信,使用的是9300的端口,我们也暴露出来。

image-20210504145617728

测试一下

image-20210504145702556

表示安装成功了。

es快速入门

image-20210504145740794

学习es的,最好的资料,就是官方文档。

image-20210504145819851

image-20210504145831101

image-20210504145841208

image-20210504145920584

image-20210504150006025

json有天然的,轻量级,和,跨平台的优势。

我们一个json文档,就代表,一个数据对象。

例子理解基本概念

image-20210504150138971

  • 存储一些雇员数据,放在ES中。
  • 员工数据,是以雇员文档,就是刚才看到的JSON文档的形式,存储的。
  • 我们把,给ES当中,存数据的行为,叫做索引
    • 其实,索引,就是存储的意思而已。
    • 索引的第二层意思,就是数据库的意思了。

image-20210504150419944

索引 数据库
类型
文档 记录、行
属性 字段

宫睿这个女人,只有身材是不错的。

保存数据

我们保存文档到ES当中::

image-20210504150727970

image-20210504150808605

postman发送请求

image-20210504150837859

image-20210504150934831

image-20210504151014729

同样的方式,我们存进去3个员工。

这个时候,ES就能够帮我们分析和搜索这些数据了。

检索文档

image-20210504151154135

image-20210504151213920

如果发送DELETE请求,这是删除员工的。

如果发送HEAD请求,这是检查,是不是有这个员工的。

image-20210504151342357

image-20210504151358078

image-20210504151419599

image-20210504151442902

image-20210504151453877

image-20210504152140704

这就是,使用rest风格请求,对es数据,进行增删改查。

轻量搜索

image-20210504152234637

image-20210504152309144

image-20210504152340603

image-20210504152412798

查询表达式搜索

image-20210504152448821

image-20210504152552735

post请求,是用来,使用查询表达式,搜索的哦。

image-20210504152704082

image-20210504152716503

全文搜索

image-20210504152817720

image-20210504152840309

短语搜索

这个就是短语完全匹配的意思。全文检索的时候,有任何一个单词都行的。像是上面的例子当中,rock clibing。

image-20210504153033717

image-20210504153050329

高亮搜索

image-20210504153129541

image-20210504153156814

其实,就是在玩这些查询表达式。

springboot整合es

image-20210504153250488

创建新的工程

image-20210504153334152

image-20210504153348377

选择web模块,是为了方便测试。

image-20210504153418215

image-20210504153439542

image-20210504153500072

springboot是默认使用spring data模块来操作elasticsearch。

es自动配置做了什么

image-20210504153613023

这是spring data对es的自动配置部分。

image-20210504153642290

这是jest,是非常流行的es客户端工具,是用http的方式,和es进行交互的。

总结-1

image-20210504153752556

到底哪种技术是默认生效的呢?

jest自动配置

image-20210504153910498

spring data ElasticsearchAutoConfiguration

这个自动配置文件做了什么呢?

elasticsearchClient

给IOC容器中注入了一个elasticsearchClient。

image-20210504154028239

我们客户端上,需要配置ClusterNodes这个信息。

包括ClusterNames这个信息。

1 - elasticsearchDataAutoConfiguration

image-20210504182935386

在这里,帮我们往IOC容器当中,配置了一个:ElasticsearchTemplate。

到这里,基本上,我们也回过味来了。

JdbcTemplate,RedisTemplate,RabbitTemplate,ElasticsearchTemplate。

这说明springboot,喜欢,在整合别人的时候,注入一个XXXTemplate的东西。

2 - ElasticsearchRepositoriesAutoConfiguration

image-20210504183155906

这个ElasticsearchRepositoriesAutoConfiguration的作用,就是启用了ElasticsearchRepository接口,这个,就类似JPA的那种编程方式一样的。我们可以写一个接口,来继承这个ElasticsearchRepository,我们的接口,就会有相应的方法了。

image-20210504183237025

3 - 总结

image-20210504183506999

接下来,我们是分别测试,用这两种方式,来操作es。

4 - 注释

我们先在pom文件当中,将spring-boot-starter-data-elasticsearch来注释掉。

5 - 导入jest

image-20210504183641626

image-20210504183705491

image-20210504183719126

6 - jest自动配置

image-20210504183754197

我们查看一下jest的自动配置类,有没有生效的。

image-20210504183901093

我们从jestAutoConfiguration当中,找到JestProperties,然后进入去看看:

image-20210504184001378

这里面,展示了,哪些东西,是我们可以在application.properties当中配置的。

7 - application.properties

image-20210504184156233

8 - 启动

image-20210504184130970

9 - 需要先写个bean

image-20210504190013761

10 - 测试JestClient操作ES

image-20210504191308857

启动一下,然后从浏览器当中,查询一下,就得到了,下面的结果:

image-20210504191401155

11 - 测试使用Jest来进行搜索

image-20210504191724930

然后,我们启动了这个程序,我们从控制台中,看到了,它搜索出来了,内容当中携带hello的内容了。

image-20210504191826423

12 - Jest其他的操作

JestClient的基本的操作,就是,上面的两个演示的内容。

更多的,详细的功能,我们可以参考github上面,这个项目的,官方文档。

来学习,其他的,高级的,一些东西。

image-20210504192010714


0 - 整合spring data es模块

image-20210504192058312

1 - 操作pom文件

image-20210504192139834

我们把原来,我们在测试jest的时候,关闭的,spring-data相关的依赖内容,重新打开。

就是如上图,所示的内容。

2 - application.properties

要在application.properties当中,配置节点的名字的哦。

我们es的节点的相关的信息,可以参考下面的内容:

image-20210504192328246

我们的配置信息,是如下所示的:

image-20210504192414464

3 - 启动项目

如果,我们只是修改了pom文件,只是配置了上面的两个东西。然后启动项目,可能是会,出现下面的报错的:

image-20210504192544682

因为节点之间的通信,是使用9300端口的,但是,我们在启动项目的时候,居然是报了上面的错误的。

这个是为什么原因呢?

这主要是因为项目当中,使用的es是2.4.6的版本:

image-20210504192742797

而,我们启动的es的版本是5.6.9的版本哦。

image-20210504192810520

这个,也就是说,springdata的es版本,有可能是,不合适的。

我们需要找到一个合适的,spring data版本才可以。

我们接下来,参考一下官方文档。

4 - spring data 官方文档

image-20210504192949148

image-20210504193046994

5 - 分析当前spring-boot版本适配关系

image-20210504193135639

image-20210504193157413

根据上面的,spring data官方文档,我们可以知道,这个版本都是对应于es的2.x版本的。

6 - 解决方法

现在,我们有两种办法,来解决,这个版本适配的问题。

第一种方法,我们升级spring boot的版本,我们使用更高版本的spring boot版本,这样我们的spring data的版本就会更高,我们的spring data elasticsearch的版本,就会更高的。这样,就解决了这个问题了。

第二种方法,我们需要安装一个,2.x版本的es的。

7 - 请注意

image-20210504193452088

8 - 安装2.4.6的es

image-20210504193546826

image-20210504193630191

image-20210504193718579

image-20210504193735082

image-20210504193751695

安装成功。

9 - 修改application.properties

image-20210504193834065

10 - 再次启动项目

image-20210504193855592

这里,显示启动成功.

那么,我们做了,这么多的目的,就是为了测试,使用spring data es模块,来操作es的。

现在,我们应该怎么做呢?

我们应该是有两种用法的。

可以参考官方文档:https://github.com/spring-projects/spring-data-elasticsearch

第一种,是编写ElasticsearchRepository的子接口。

第二种,是使用ElasticsearchTemplate来操作es。

11 - 总结

image-20210504194216773

12 - ElasticsearchRepository

第一步,先写个接口。

image-20210504194305000

第二步,我们的这个接口,是需要继承extends ElasticsearchRepository的,这个接口是,有两个泛型的。

第一个泛型,是我们要存储的数据的类型,第二个范晓萱,是主键ID的泛型。

image-20210504194411550

第三步:我们写一个bean吧。

image-20210504194734016

13 - 子接口

image-20210504195024166

我们的子接口,写好了之后。

这个子接口,就具备了,ElasticsearchRepository当中的,方法了。

image-20210504195114960

14 - 测试给ES保存数据

我们的bean上面,要加上es相关的注解哦:

image-20210504195251405

这里面是测试,给ES当中保存数据:

image-20210504195327422

我们查询一下,得到的结果,是这样的:

image-20210504195414549

这是证明,已经存储进去了。

15 - 接口ctrl+f12

image-20210504195549719

在这个接口,当中,有好多好多的方法的。

这个,也支持,自定义的方法的。

16 - 接口自定义方法

image-20210504195727780

这里,只写了个接口,也没有写什么接口的实现,这玩意,就能用了吗?

image-20210504195911350

我们发现,确实是查询成功了:

image-20210504195942869

为什么会出现这么神奇的效果呢?

在官方文档当中,对查询方法,怎么命名,对应怎么样的query string,有一一的对比说明哦:

image-20210504200124490

如果你自定义了一个方法,也支持用@Query注解,将查询表达式,标注在一个方法上面的:

image-20210504200210038

17 - ElasticsearchTemplate的使用例子

在官方文档中,是有这个东西的:

image-20210504200404771



这篇关于雷丰阳springboot之检索之elasticsearch整合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程