一.概述
Spring Data Elasticsearch是Spring Data项目下的一个子模块.
简化了原生的Elasticsearch的开放。
Spring Data 的使命是给各种数据访问提供统一的编程接口,不管是关系型数据库(如MySQL),还是非关系数据库(如Redis),或者类似Elasticsearch这样的索引数据库。从而简化开发人员的代码,提高开发效率。
包含很多不同数据操作的模块:
特征:
- 支持Spring的基于@Configuration的java配置方式,只要在yml文件中配置,项目中就可以使用
- 提供了用于操作ES的便捷工具类ElasticsearchTemplate。包括实现文档到POJO之间的自动智能映射。类似于通用Mapper.通过对象操作ES.
- 利用Spring的数据转换服务实现的功能丰富的对象映射
- 基于注解的元数据映射方式,而且可扩展以支持更多不同的数据格式
- 根据持久层接口自动生成对应实现方法,无需人工编写基本操作代码(类似mybatis,根据接口自动得到实现)。当然,也支持人工定制查询
( 今天的正主就要开始了 (^_^)~喵~!! )
二.环境搭建
步骤一 : 首先,我们要修改我们Java项目中的pom 文件 ,在pom文件中添加 我们的依赖
<!--elasticsearch --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
步骤二 : 其次,我们则需要修改我们的yml 文件 ,在yml 文件中添加有关我们 elasticsearch 的相关配置
spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: 127.0.0.1:9300
温馨小提示 : 修改我们的yml 文件,一定要确保格式是对的哦! 小喵有着深刻体会 (┭┮﹏┭┮)~.
小喵记得自己当时是这样写的 :
结果,可想而知报了个错....
小喵一开始以为是没注入这个对象,但是查看的时候发现注入了,经过大神帮忙发现是yml 文件 格式有问题
因为那些属性名没高亮 ....
你们以为错误完了吗?不,看这, 迎面又跑来了一个错误(┭┮﹏┭┮)....
步骤三 :运行时,出现异常 : Caused by: java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]
小喵网上查了一下这个错误,说是因为 netty冲突的问题 ,
同时,小喵也得到了解决方案 :
就是在项目初始化前设置一下一个属性。
方法有两种 :
两种方式都是用的一段代码 :
System.setProperty("es.set.netty.runtime.available.processors", "false"); |
方法1 : 在我们的SpringBoot启动类中加入这段设置:
方法2 : 我们也可以单独为Elasticsearch写一个配置类,在配置类中初始化时设置
加入之后确实不报错了 (^_^) 终于可以敲代码了~~~
三 . 索引操作
步骤一 : 创建映射类
我们需要创建映射类, 用于表示java的数据和elasticsearch的数据对应关系。在spring data elasticsearch中使用注解完成。
注解名称 | 描述 |
@Document |
用于配置Java类与索引/类型对应关系 - indexName:对应索引库名称 - type:对应在索引库中的类型 - shards:分片数量,默认5 - replicas:副本数量,默认1 |
@Id | 唯一标识 |
@Field |
用于配置Java属性和es的字段对应关系 – type:字段类型,枚举:FieldType – analyzer:分词器名称 – index:是否索引,布尔类型,默认是true – store:是否存储,布尔类型,默认是false |
步骤二: 创建索引 、添加映射 、删除映射
ElasticsearchTemplate工具类提供对应方法完成以下功能:
-
创建索引: createIndex( 映射类.class )
-
添加映射: putMapping( 映射类.class )
-
删除索引: deleteIndex( 映射类.class )
1 )创建测试类,在类中直接注入 ElasticsearchTemplate 工具类.
2 ) 调用对应的API方法进行操作
这样就完成了我们的创建索引、 添加映射 和 删除映射了.
四 .文档操作
文档操作的话,我们则需要继承一个接口.
Spring Data Elasticsearch提供了一个顶级接口 Repository,用于对“配置类”进行增删改查操作的。顶级类没有完成具体的功能,具体的功能通过子类完成
PagingAndSortingRepository:(第二代)完成分页和排序功能
ElasticsearchCrudRepository:(第三代)增删改查功能
ElasticsearchRepository:(第四代)完成所有功能
编写:只需要编写子接口,继承 ElasticsearchRepository即可,且spring data自动加载该类。
-
注意:接口在使用时,需要确定2个泛型信息
-
第一个泛型:映射类,ESBook
-
第二个泛型:映射类唯一标识的类型,ID的类型 Long
-
使用:其他位置,直接注入repository子接口即可
添加数据
方法名 | 描述 |
save(T t ) | 保存一个数据 |
saveAll (T t) | 保存一组数据 |
修改数据
修改和添加我们使用的是同一个方法
两者的区分标准 :
如果id的值==有==对应的数据,则进行==更新==操作。
如果id的值==没有==对应的数据,则进行==添加==操作。
删除数据
这就是小喵所学到的SpringData整合Elasticsearch的文档操作!
后期也会更新查询操作哦!
(^_^)~喵~!!