一招教你升级elasticsearch6.x到7.x

814 阅读1分钟

我的项目配置

  • springboot 版本:2.0.4
  • es 版本:6.4.1
  • 升级后的 es 版本:7.6.2

开始升级

  1. 首先调整一下我们的 maven 依赖,调整后的依赖如下
	<dependency>
	    <groupId>org.elasticsearch.client</groupId>
	    <artifactId>elasticsearch-rest-high-level-client</artifactId>
	    <version>${elasticsearch.version}</version>
	</dependency>
	<dependency>
	    <groupId>org.elasticsearch.client</groupId>
	    <artifactId>elasticsearch-rest-client</artifactId>
	    <version>${elasticsearch.version}</version>
	</dependency>
	<dependency>
	    <groupId>org.elasticsearch</groupId>
	    <artifactId>elasticsearch</artifactId>
	    <version>${elasticsearch.version}</version>
	</dependency>
  1. 调整对应的 es 配置,我这里是单机的,所以只配置单机

import lombok.Data; 这个是 lombok 插件的包,必要的话可以引入,否则可以删掉,并自己重写 get/set 方法

	import lombok.extern.slf4j.Slf4j;
	import org.apache.http.HttpHost;
	import org.apache.http.auth.AuthScope;
	import org.apache.http.auth.UsernamePasswordCredentials;
	import org.apache.http.client.CredentialsProvider;
	import org.apache.http.impl.client.BasicCredentialsProvider;
	import org.elasticsearch.client.RestClient;
	import org.elasticsearch.client.RestHighLevelClient;
	import org.springframework.beans.factory.annotation.Autowired;
	import org.springframework.context.annotation.Bean;
	import org.springframework.context.annotation.Configuration;

	@Configuration
	@Slf4j
	public class ElasticsearchConfig {

	    @Autowired
	    private EsProperties esProperties;

	    @Bean
	    public RestHighLevelClient restHighLevelClient() {

		  // 配置你 es 的账号密码
	        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
	        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esProperties.getUsername(), esProperties.getPassword()));

	        RestHighLevelClient client = new RestHighLevelClient(
	                RestClient.builder(
	                        new HttpHost(esProperties.getHost(), esProperties.getPort(), "http")).setHttpClientConfigCallback(httpAsyncClientBuilder -> {
	                    httpAsyncClientBuilder.disableAuthCaching();
	                    return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
	                }));
	        return client;
	    }
	}
	import lombok.Data;
	import org.springframework.boot.context.properties.ConfigurationProperties;
	import org.springframework.context.annotation.Configuration;

	@Data
	@Configuration
	@ConfigurationProperties(prefix = "es")
	public class EsProperties {

	    private String sslFolder;

	    private String username;

	    private String password;

	    private String host;

	    private Integer port;

	}

yml 文件里面 es 的配置

	es:
	  sslFolder: es-ssl
	  username: admin
	  password: 123456
	  host: 127.0.0.1
	  port: 9200
  1. 完成以上配置后,可以尝试启动一下项目,如果没有报错,则可以尝试编写接口访问 es 了。

可能碰到的问题

  1. 如果你的 SpringBoot 是 2.x,并且,你使用了 SpringBoot 自带的 es 依赖,需要去掉如下依赖,不然会出现 NoClassDefFoundError:org/elasticsearch/common/transport/InetSocketTransportAddress 异常,造成这个的原因是因为该依赖支持的 es 版本是 6.x,是需要 InetSocketTransportAddress 类,而 es7.x,舍弃掉了 InetSocketTransportAddress 使用的是 TransportAddress
	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
	</dependency>

注:你如果碰到其他问题,可以在评论区留言!