上一篇介绍了JavaAPI来操作ES,虽然易用,但是如果操作大量的数据并且程序相对复杂,那么会有大量冗余的代码和API操作,SpringBoot作为轻量级易用框架自然也帮我们封装好了各种API操作,只需要操作数据库一样操作ES即可,一起看看吧
代码已上传Github: https://github.com/chenliang15405/common-study/tree/main/es-spring
Maven依赖
-
pom.xml
中增加依赖<!-- elasticsearch 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
添加
elasticsearch
的starter
依赖即可,减少很多配置代码,springboot已经内置了很多配置 -
properties
配置配置文件中只需要增加
elasticsearch
的连接配置即可# es服务地址 elasticsearch.host=127.0.0.1 # es服务端口 elasticsearch.port=9200
ElasticSearch配置
前置配置
-
增加ElasticSearch与Spring配置
将需要使用的
RestHighLevelClient
客户端Bean,注入到Spring中,由Spring管理// 这里指定的就是配置文件中配置的名称的前缀,将配置文件中的配置自动注入到bean中 @ConfigurationProperties(prefix = "elasticsearch") @Configuration @Data // 注意这里使用了lombok,如果去掉该注解,需要给host和port增加getter/setter public class ElasticSearchConfig extends AbstractElasticsearchConfiguration { private String host; private Integer port; /** * 返回ESClient对象 */ @Override public RestHighLevelClient elasticsearchClient() { RestClientBuilder builder = RestClient.builder(new HttpHost(host, port)); RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder); return restHighLevelClient; } }
-
增加Repository
与操作Database一样,需要增加接口,并且继承``ElasticsearchRepository
类,那么
Spring`在启动的时候就会自动扫描该类,通过动态代理相应的实现类,可以直接使用内置的相关方法,高效!@Repository public interface ProductDao extends ElasticsearchRepository<Product, Long> { }
使用方式与
Spring
提供的方式基本一致,无论是Database还是Es或者MongoDB,基本都是一致的方式
索引操作
-
配置索引Bean
通过注解可以直接将Bean中的字段和ES中的索引字段进行映射,后续直接操作Bean就可以操作ES中的索引,非常的方便。
@Data @NoArgsConstructor @AllArgsConstructor @Document(indexName = "product", shards = 3, replicas = 1) // 索引名称, 主分片数量 -> 就是将数据分配到多个分片中,不保存在一个分片(节点), replicas:副本的数量,每个主分片都会创建这么多的副本数量 public class