重剑无锋,大巧不工 SpringBoot --- 整合使用 Elasticsearch
开始使用
引入依赖
1 | <dependency> |
这里需要注意的是:
SpringBoot 的版本和 elasticsearch 的版本问题,在springboot 1.3.5 版本之前支持elasticsearch2.0 以下的版本,springboot1.3.5之后的版本支持elasticsearch5.0以下的版本
net.java.dev.jna 这个依赖是因为启动后报类不存在,加个jna依赖加上后就好了
配置文件
1 | spring: |
这里需要注意的是:
elasticsearch对外提供的api的端口的是9200,提供各个集群间和客户端通信的是9300
配置文件里 cluster-nodes 配置项如果不填写的话,springboot应用启动时会自动创建内部的 elasticsearch 客户端,你会发现即是本地没开 elasticsearch 服务也能跑起来
配置多个集群的话 cluster-nodes 就配置多条信息,用逗号隔开
在 SpringBoot 项目中使用
- 主要的一个接口
ElasticsearchRepository<T,ID>
,第一个是要存储的实体类,第二个参数是 ID 类型 - 还有个
ElasticsearchCrudRepository
,顾名思义就是增删改查 - 自定义一个接口实现上述接口
- 定义实体类
- 自定义实现类可直接注入使用
- 默认的已经存在了增删改查的方法了,可以直接使用
- 想要更多的功能可以在接口中实现更多的自定义
自定义一个 DAO :
1 | public interface SongDao extends ElasticsearchRepository<Song,Integer> { |
定义一个实体类 :
1 |
|
注意:
@Document注解里面的几个属性,类比mysql的话是这样:
index –> DB
type –> Table
Document –> row
@Id注解加上后,在Elasticsearch里相应于该列就是主键了,在查询时就可以直接用主键查询,后面一篇会讲到。其实和mysql非常类似,基本就是一个数据库
indexName在上述注解中需要小写
使用的话 注入SongDAO ,之后就可以看到相应的方法了
使用起来就是如此简单,感觉使用起来很像MongoDB配置
有一些注解的配置
有时候使用起来会有一些问题
- 在默认策略下, Java 实体类叫什么名字,生成后的表名就叫什么,但我们可能并不想这样
- 同样的道理,有时属性名和字段也并不想一样的
注解解决这些问题
@Id
: 标明表的 ID , 自带索引,无需维护@Document
: 解决第一个问题@Field
: 解决第二个问题,默认不加@Field 有一写默认配置,一旦添加了@Filed注解,所有的默认值都不再生效。此外,如果添加了@Filed注解,那么type字段必须指定
入门使用就写到这