Spring Boot连接Elasticsearch 6.2.3配置方案求助
我来给你一套亲测可行的Spring Boot 2.0.1连接Elasticsearch 6.2.3配置方案,一步步梳理清楚:
Spring Boot 2.0.1 连接 Elasticsearch 6.2.3 完整配置指南
一、Pom.xml 依赖配置
你当前的依赖版本是完全适配的——Spring Boot 2.0.1.RELEASE的spring-boot-starter-data-elasticsearch默认对应Elasticsearch 6.2.x系列,和你的6.2.3版本兼容性拉满,直接用就行:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.0.1.RELEASE</version> </dependency>
二、两种连接方式任选
方式1:手动配置TransportClient(适合自定义需求)
如果你需要更灵活的客户端配置,写个配置类手动创建TransportClient实例:
import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.net.InetAddress; import java.net.UnknownHostException; @Configuration public class ElasticsearchConfig { @Bean public TransportClient transportClient() throws UnknownHostException { // 匹配你的ES集群名称,默认是elasticsearch Settings settings = Settings.builder() .put("cluster.name", "elasticsearch") .put("client.transport.sniff", true) // 开启自动嗅探集群节点,动态感知节点变化 .build(); // 添加ES节点地址,TCP端口默认是9300,多节点可重复add TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300)); return client; } }
方式2:用Spring Boot自动配置(更省心)
不想写配置类的话,直接在application.properties里加配置,Spring会自动帮你初始化客户端:
# Elasticsearch集群配置 spring.data.elasticsearch.cluster-name=elasticsearch spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300 # 开启ES仓库自动扫描 spring.data.elasticsearch.repositories.enabled=true
三、实体类与索引映射
创建一个和ES索引对应的实体类,用注解绑定索引、类型信息(ES 6.x要求一个索引只能有一个类型,推荐用_doc):
import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; @Document(indexName = "user", type = "_doc", shards = 1, replicas = 0) public class User { @Id private String id; private String name; private Integer age; private String email; // 省略getter、setter、构造方法 }
四、Repository层快速实现CRUD
继承ElasticsearchRepository,Spring Data会自动帮你实现基础CRUD,还能自定义查询方法:
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import java.util.List; public interface UserRepository extends ElasticsearchRepository<User, String> { // 自定义查询方法,Spring Data会自动解析实现 List<User> findByName(String name); }
五、业务层调用示例
在Service里注入Repository或者TransportClient,直接操作ES:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired private UserRepository userRepository; // 保存用户到ES public User saveUser(User user) { return userRepository.save(user); } // 根据姓名查询用户 public List<User> getUserByName(String name) { return userRepository.findByName(name); } }
注意事项
- 确保ES集群的
cluster.name和配置里的完全一致,否则连接会失败 - 开放ES的9300端口,防火墙不要拦截TCP连接
- ES 6.x版本不要在一个索引下创建多个类型,遵循官方规范用
_doc作为类型名
内容的提问来源于stack exchange,提问作者Michael Draper
相关产品推荐
相关产品推荐

